‘编程学习’ 分类下的所有文章
2022六月8

Oracle 建表空间创建用户常用语句

CREATE TABLESPACE DEMO LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/DEMO.dbf'  SIZE 200M AUTOEXTEND ON NEXT 32M MAXSIZE 500M EXTENT MANAGEMENT LOCAL;

create temporary tablespace DEMO_TEMP tempfile '/opt/oracle/oradata/ORCLCDB/DEMO_TEMP.dbf' size 100m autoextend on next 32m maxsize 500m extent management local;

alter session set "_ORACLE_SCRIPT"=true;

create user DEMO identified by DEMO default tablespace DEMO temporary tablespace DEMO_TEMP;

alter user DEMO identified by DEMO;

grant connect,resource,dba to DEMO;

alter user DEMO quota unlimited on users;
2021十月18

M1 node-sass nvm

nvm 切换node版本

nvm alias default 14
nvm use 14

nodes-sass 安装

npm install --target_arch=x64
2021九月17

Nginx 匹配路径让请求走不同代理

location /api/v1 {
        set $is_matched 0;
        if ($request_uri ~ /api/v1/user/100001/ ) {
            proxy_pass https://127.0.0.1:1001/;
            set $is_matched 1;
        }
        
        if ($request_uri ~ /api/v1/user/100002/ ) {
            proxy_pass https://127.0.0.1:1001/;
            set $is_matched 1;
        }

        # 没有匹配到,跳转到默认页面
        if ($is_matched = 0) {
            proxy_pass https://127.0.0.1:8080;
        }
        
    }
2021七月30

MongoDB 5.0 时序集合数据示例代码

采用最新Java驱动

<dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.3.0</version>
</dependency>

获取数据源及数据库


/**
 * @author wizzer@qq.com
 */
public class ZMongoDatabase {

    private MongoDatabase db;

    public ZMongoDatabase(MongoDatabase db) {
        this.db = db;
    }

    /**
     * 获取集合,集合不存在则返回 null
     *
     * @param name 集合名称
     * @return 集合薄封装
     */
    public MongoCollection<Document> getCollection(String name) {
        if (!this.collectionExists(name)) {
            return null;
        }
        return db.getCollection(name);
    }

    /**
     * 获取一个集合,如果集合不存在,就创建它
     *
     * @param name         集合名
     * @param dropIfExists true 如果存在就清除
     * @return 集合薄封装
     */
    public MongoCollection<Document> createCollection(String name, boolean dropIfExists) {
        // 不存在则创建
        if (!this.collectionExists(name)) {
            return createCollection(name, null);
        }
        // 固定清除
        else if (dropIfExists) {
            db.getCollection(name).drop();
            return createCollection(name, null);
        }
        // 已经存在
        return db.getCollection(name);
    }

    /**
     * 获取一个集合,如果集合不存在,就创建它
     *
     * @param name         集合名
     * @param options      集合配置信息
     * @param dropIfExists true 如果存在就清除
     * @return 集合薄封装
     */
    public MongoCollection<Document> createCollection(String name, CreateCollectionOptions options, boolean dropIfExists) {
        // 不存在则创建
        if (!this.collectionExists(name)) {
            return createCollection(name, options);
        }
        // 固定清除
        else if (dropIfExists) {
            db.getCollection(name).drop();
            return createCollection(name, options);
        }
        // 已经存在
        return db.getCollection(name);
    }

    /**
     * 创建一个集合
     *
     * @param name    集合名
     * @param options 集合配置信息
     * @return 集合薄封装
     */
    public MongoCollection<Document> createCollection(String name, CreateCollectionOptions options) {
        if (this.collectionExists(name)) {
            throw Lang.makeThrow("Colection has exists: %s.%s", db.getName(), name);
        }
        // 创建默认配置信息
        if (null == options) {
            options = new CreateCollectionOptions().capped(false);
        }
        db.createCollection(name, options);
        return db.getCollection(name);
    }

    /**
     * 判断集合是否存在
     *
     * @param collectionName 集合名
     * @return
     */
    public boolean collectionExists(String collectionName) {
        return listCollectionNames().contains(collectionName);
    }

    /**
     * @return 当前数据库所有可用集合名称
     */
    public List<String> listCollectionNames() {
        return db.listCollectionNames().into(new ArrayList<String>());
    }

    public MongoDatabase getNativeDB() {
        return this.db;
    }
}

初始化数据库示例

@Inject
    private ZMongoDatabase zMongoDatabase;

    public void init() {
        CreateCollectionOptions collectionOptions = new CreateCollectionOptions();
        TimeSeriesOptions timeSeriesOptions = new TimeSeriesOptions("ts");
        timeSeriesOptions.metaField("metadata");
        timeSeriesOptions.granularity(TimeSeriesGranularity.SECONDS);
        collectionOptions.timeSeriesOptions(timeSeriesOptions);
        MongoCollection<Document> deviceCollection = zMongoDatabase.createCollection("device", collectionOptions, true);
        List<Document> list = new ArrayList<>();
        Device device = new Device(Times.now(), 36.7, "0001");
        list.add(new Document().append("ts", device.getTs()).append("temperature", device.getTemperature()).append("metadata",
                new Document().append("no", device.getNo())));

        Device device1 = new Device(Times.now(), 35.2, "0002");
        list.add(new Document().append("ts", device1.getTs()).append("temperature", device1.getTemperature()).append("metadata",
                new Document().append("no", device1.getNo())));

        Device device2 = new Device(Times.now(), 10.7, "0002");
        list.add(new Document().append("ts", device2.getTs()).append("temperature", device2.getTemperature()).append("metadata",
                new Document().append("no", device2.getNo())));

        Device device3 = new Device(Times.nextDay(Times.now(), 1), 30.0, "0002");
        list.add(new Document().append("ts", device3.getTs()).append("temperature", device3.getTemperature()).append("metadata",
                new Document().append("no", device3.getNo())));

        // Document.parse(Json.toJson(new Device()));

        InsertManyResult insertManyResult = deviceCollection.insertMany(list);
        log.info(Json.toJson(insertManyResult));
    }

时序数据求平均值示例

    // 官方时序数据统计Demo https://docs.mongodb.com/manual/core/timeseries-collections/
    @Ok("json:full")
    @At("/avg")
    public Object avg(@Param(value = "no", df = "0002") String no) {
        List<Bson> bsons = new ArrayList<>();
        // 筛选条件
        Bson match = Aggregates.match(Filters.eq("metadata.no", no));

        // 输出对象
        Bson project = Aggregates.project(Projections.fields(
                // 日期格式化
                Projections.computed("date", new Document("$dateToParts", new Document().append("date", "$ts"))),
                Projections.computed("temperature", 1)
        ));

        // 分组统计 平均值
        Bson group = Aggregates.group(new Document("date", new Document().append("year", "$date.year").append("month", "$date.month").append("day", "$date.day")),
                Accumulators.avg("avgTemp", "$temperature")
        );

        bsons.add(match);
        bsons.add(project);
        bsons.add(group);
        log.info(Json.toJson(bsons));
        return zMongoDatabase.getCollection("device").aggregate(bsons);
    }

完整代码:

nutzboot starter 组件

nutzboot-starter-mongodb-plus

组件使用示例

nutzboot-demo-simple-mongodb-plus

i’am a separator…

2021五月12

Vue ElmentUI 趟过的坑-1

1、el-tabs 中放置 el-tree 使用 this.$ref[‘tree’] 获取不到对象

使用 this.$ref[‘tree’][0] 可以取到

2、el-cascader 动态加载行政区划,修改表单时无法初始化选中的值

需要设置属性 :key=”xx” ,在数据加载完成后让 xx ++ 自加1


					
2021三月25

TDengine 时序数据库的 NutzBoot 开发实例

nutz 及 nutzboot 已支持 TDengine

基于 nutzboot 开发 TDengine 实例

开发环境

  • 服务端:CentOS 8.2 64 位
  • 客户端:Windows 10 64 位

TDengine 安装及配置

  • 官网下载 rpm 安装包
  • 执行安装 rpm -ivh TDengine-server-2.0.18.0-Linux-x64.rpm
  • 修改配置文件 vi /etc/taos/taos.cfg 加上当前服务器 hostname 主机名
# first fully qualified domain name (FQDN) for TDengine system
firstEp                   wizzer-test:6030
# local fully qualified domain name (FQDN)
fqdn                      wizzer-test

  • 若为默认密码则直接输入 taos 或 taos -h 127.0.0.1 执行数据库创建命令
taos > create database test;

Windows 10 hosts 配置

  • 修改 C:\Windows\System32\drivers\etc\hosts
  • 添加 ip wizzer-test

创建 nutzboot Maven 项目

  • pom.xml 文件加入 nutzboot 及 TDengine JDBC 依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.budwk</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <nutzboot.version>2.4.2-SNAPSHOT</nutzboot.version>
        <jaxb-api.version>2.3.1</jaxb-api.version>
        <slf4j.version>1.7.25</slf4j.version>
        <logback.version>1.2.3</logback.version>
        <taos-jdbcdriver.version>2.0.23</taos-jdbcdriver.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.nutz</groupId>
            <artifactId>nutzboot-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.nutz</groupId>
            <artifactId>nutzboot-starter-nutz-dao</artifactId>
        </dependency>
        <dependency>
            <groupId>org.nutz</groupId>
            <artifactId>nutzboot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.taosdata.jdbc</groupId>
            <artifactId>taos-jdbcdriver</artifactId>
            <version>${taos-jdbcdriver.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.nutz</groupId>
                <artifactId>nutzboot-parent</artifactId>
                <version>${nutzboot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>nutz</id>
            <url>http://jfrog.nutz.cn/artifactory/libs-release</url>
        </repository>
        <repository>
            <id>nutz-snapshots</id>
            <url>http://jfrog.nutz.cn/artifactory/snapshots</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nutz-snapshots</id>
            <url>http://jfrog.nutz.cn/artifactory/snapshots</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                    <useIncrementalCompilation>false</useIncrementalCompilation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.nutz.boot</groupId>
                <artifactId>nutzboot-maven-plugin</artifactId>
                <version>${nutzboot.version}</version>
            </plugin>
        </plugins>
    </build>
</project>
  • 创建实体类
/**
 * 注意 TDengine 表及字段名都为小写字母
 */
@Table("iot_dev")
public class Iot_dev implements Serializable {
    private static final long serialVersionUID = 1L;

    @Column
    @Comment("ID")
    @ColDefine(type = ColType.TIMESTAMP)
    private Date ts;

    @Column("devid") //字段名都为小写字母
    @Comment("设备 ID")
    @ColDefine(type = ColType.VARCHAR, width = 32)
    private String devId;

    @Column("devtype") //字段名都为小写字母
    @Comment("设备类型")
    @ColDefine(type = ColType.BINARY, width = 32)
    private String devType;

    @Column
    @Comment("状态")
    @ColDefine(type = ColType.BOOLEAN)
    private Boolean status;

    @Column
    @Comment("读数 1")
    @ColDefine(type = ColType.DOUBLE)
    private Double val1;

    @Column
    @Comment("读数 2")
    @ColDefine(type = ColType.INT)
    private Integer val2;

    @Column
    @Comment("读数 3")
    @ColDefine(type = ColType.INT,width = 3)
    private Integer val3;

    @Column
    @Comment("读数 4")
    @ColDefine(type = ColType.INT,width = 2)
    private Integer val4;

}

完整代码见

https://gitee.com/wizzer/demo/tree/master/nutzboot-tdengine-demo
2021三月24

BudWK V6 代码生成器 IDEA 插件发布

本插件不同于V5代码生成器插件,无须引入项目中其他jar包,无须事先编译POJO类:

  • 插件不依赖任何第三方jar包
  • 通过 POJO 类生成接口类、接口实现类、控制类
  • IDEA 须从项目根目录打开加载项目(以获取正确的 projectBasePath )
  • 打开 POJO 类Java文件,在文件内部右击选择”Generate”->”WkCodeGenerator”

插件下载:
https://gitee.com/budwk/budwk-codegenerator/releases

插件源码:

https://gitee.com/budwk/budwk-codegenerator
https://github.com/budwk/budwk-codegenerator
2021三月12

M1 MacBook Pro 常用知识

1、终端设置代理

export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080

2、安装Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

3、Spotlight 索引占有CPU过高

关闭

sudo mdutil -a -i off

打开

sudo mdutil -a -i on

2021一月12

MacBook Pro M1 环境变量maven配置

使用root权限修改文件

sudo vi ~/.bash_profile

vi 操作命令省略,插入如下内容

export MAVEN_HOME=/Users/wizzer/work/server/apache-maven-3.6.3

export PATH=$PATH:$MAVEN_HOME/bin

只读文件强制保存

:wq!

source ~/.bash_profile

解决新窗口和重启找不到mvn命令的问题:

touch ~/.zshrc

open ~/.zshrc

文件内容如下,command+S保存

source ~/.bash_profile

2020十二月23

el-cascader 级联选择框懒加载的回显

 <el-cascader ref="area" v-model="infoForm.area" :props="cascaderProps" style="width: 500px;"
                                     size="small" placeholder="请选择区域"></el-cascader>

cascaderProps: {
                    lazy: true,
                    value: 'id',
                    label: 'text',
                    lazyLoad: function (node, resolve) {
                        if (node.level === 0) {
                            var url = base + "/assets/platform/plugins/zoning/0.json";
                            $.get(url, function (d) {
                                resolve(d);
                            }, "json");
                        } else {
                            var pidaspath = node.data.id > 0 ? (node.data.id.substring(0, 2) + "/" + node.data.id) : 0;
                            var url = base + "/assets/platform/plugins/zoning/"+pidaspath+".json";
                            $.get(url, function (d) {
                                resolve(d);
                            }, "json");
                        }
                    }
                },
                infoForm: {
                    type: 'designer',
                    area: [],
                    areaCode: '',
                    areaText: '',
                },
// 后台返回数据时
this.$set(this.infoForm,'area',this.infoForm.areaCode.split(','))

// 前端入库数据处理
if (this.infoForm.area) {
                                        this.$set(this.infoForm, 'areaCode', this.infoForm.area.toString());
                                    }
                                    if (this.$refs['area']) {
                                        var tree = this.$refs['area'].getCheckedNodes();
                                        this.$set(this.infoForm, 'areaText', tree[0].pathLabels.toString());
                                    }