the site subtitle

码农笔记

2022.11.17

这里记录着日志里面记录不了的随记,通常是一些编码过程中的问题及总结,作为个人避免再次踩坑的面板吧。

docker安装mysql 5.7

  • 拉取mysql镜像
    docker pull mysql:5.7

  • 创建mysql数据目录及配置文件
    mkdir -p /ext/mysql/data
    mkdir -p /ext/mysql/conf
    vim /ext/mysql/conf/my.conf

    内容如下:

    [mysqld]
    server_id=1
    binlog-ignore-db=mysql
    log-bin=mall-mysql-bin
    default-time_zone='+8:00'
    binlog_cache_size=2M
    binlog_format=mixed
    expire_logs_days=15
    slave_skip_errors=1062
    character-set-server=utf8
    lower_case_table_names=1
    wait_timeout=86400
    max_connect_errors=1000
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
  • 运行容器

    docker run --name=prod-mysql -d -p 3306:3306 -v /ext/mysql/data:/var/lib/mysql -v /ext/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=pwdstring mysql:5.7
    

SpringBoot读取pom.xml中的项目版本

  • pom.xml中配置资源
    <build>
      <resources>
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>**.*</include>
                  <include>**/**.*</include>
              </includes>
              <filtering>true</filtering>
          </resource>
          <resource>
              <directory>src/main/java</directory>
              <includes>
                  <include>**/*.fxml</include>
              </includes>
          </resource>
      </resources>
    </build>
    
  • 在application.yml中添加配置
    project:
      version: @project.version@
    
  • 在SpringBean中使用
    @Value("${project.version}")
    private String projectVersion;
    

注意
这里可能会出现@符号识别不了报以下错误:

ound character '@' that cannot start any token. (Do not use @ for indentation)
 in 'reader', line 34, column 19:

可以刷新一下MAVEN试试。


Maven Resource配置大坑

这里我说两个问题,这两个问题任何一个配置错误都有可能会引发另外一个问题

  1. 在Spring Boot或者其他配置文件中需要读取maven的变量时,通常配置为@project.version@,这里的原理是,将该资源复制到target/classes目录下,然后将@@占位符替换为maven变量值,也就是解析,当然这里需要一个配置filtering等于true

  2. 当我们的其他文件也放在resource目录下,并且需要一并负责到target/classes目录下是,这个filtering一定不要设置为true,因为它会替换掉源文件的内容,导致文件损坏
    引用官网的一句话

    As already mentioned filtering binary files like images,pdf`s etc. could result in corrupted output. To prevent such problems you can configure file extensions which will not being filtered.
    如前所述,过滤图像、pdf等二进制文件可能会导致输出损坏。为了防止出现此类问题,您可以配置不会被过滤的文件扩展名。
    

    以下是注意点:

    1. includes和excludes只使用一个,同时使用2个是没有任何意义的,如果错误地使用了两个,那么过滤的范围取includes减去excludes的范围(includes中有excludes的话)
    2. includes 过滤这些规则的文件
    3. excludes 过滤这些规则的文件外的所有文件
    4. filtering 的意思是启动占位符替换,使得关联pom.xml文件的文件中的占位符使用pom.xml中properties的值,只影响到本目录中过滤出来的文件
      只过滤资源的话不需要写,这和资源过滤没有一点关系,无论true或者false都会进行过滤,这个设置一般在pom.xml中配置了properties时使用