SpringBoot配置文件外置和数据库密码加密

目录

1. spring.config.location

2. spring.config.additional-location

3. yml 中mysql密码加密

4. 补充:外部jar打包进项目


1. spring.config.active

1.1加载顺序:springboot启动的时候会扫描application.properties/yml文件作为spring boot的默认配置文件。按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容,并形成互补配置.

  • file: 指当前项目根目录
  • classpath: 指当前项目的resources目录
file:./config/
file:./
classpath:/config/
classpath:/

注意:maven打包是不能把src外面的两个application.properties文件打到jar包里的。 

1.2 使用

根据不同的开发时期选择不同的额外配置,和默认的application.yml properties形成互补

方式1: 写到配置文件里面

方式2:部署的时候配置

java -jar renren-gdrc.jar --spring.profiles.active=stress

2. spring.config.location

# D:\my-application.yml 外置配置文件位置
java -jar renren-gdrc.jar  --spring.config.location = D:\my-application.yml

这样外置的配置文件会覆盖jar包里面的配置文件

3. spring.config.additional-location

java -jar renren-gdrc.jar  --spring.config.additional-location = D:\my-application.yml

这样外置配置文件会和jar包里面的配置文件互补 

外置配置  my-application.yml 连接数据库的配置给单独拿出来了。

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 数据源类型
    druid: #定义数据库连接池所需要相关配置
      initial-size: 5   # 初始化连接池大小
      min-idle: 10 # 最小维持连接池大小
      max-active: 50 # 最大可提供的连接数量
      max-wait: 60000 # 最长等待时间(50个连接都在被使用,最长等待的时间)
      # 避免db 单方面关闭连接,mysql::show variables like %timeout%

      #关注interactive_timeout和wait_timeout,(mysql服务器断开不执行操作客户端时间)默认8h,对于mysql的8h问题:
      # 1.minEvictableIdLeTimeMillis < maxEvictableIdleTimeMillis
      # 2.maxEvictableIdleTimeMillis + timeBetweenEvictionRunsMillis < 8h
     #(最大空闲时间加上 检测时间 小于 服务器断开不执行操作客户端时间。防止数据库会断开这个连接,但是应用不知道这个连接已经被数据库断开,所以链接池认为该连接是有效的,在下次请求时,连接池会把自己认为有效,但是数据库认为无效的连接分配出去,便会报错。)

      # 连接保持空闲而不被驱逐的最小时间,默认30分钟: 连接被destroy线程关闭条件:连接数> minIdle && 空闲时间 > 1800000
      min-evictable-idle-time-millis: 1800000 # 连接最小生存时间
      # 连接保持空闲而不被驱逐的最大时间,默认7h。连接被destroy线程关闭条件: 空闲时间>2520000,不管池中连接数是否>minIdle
      max-evictable-idle-time-millis: 25200000
      validation-query: select 1 from dual # 数据库状态的检测
      validation-query-timeout: 60000   # 设置验证查询的超时时间,单位是毫秒。
        # 单位:ms 默认1 min ,作用两个
        # 1.Destroy线程运行周期,见min-evictable-idle-time-millis和max-evictable-idle-time-millis
        # 2.test-while-idle使用,申请连接时,若空闲时间>60000 则执行validation-query 检测连接是否有效
      time-between-eviction-runs-millis: 60000 # 关闭空闲连接间隔 毫秒
      test-while-idle: true # 	申请连接时检测空闲时间,根据空闲时间再检测连接是否有效 使用validation-query   # 使用validationQuery,你用类似testonBorrow,但是因为有执行条件限制,所以对性能影响  #作为连接检测的兜底方案
      test-on-borrow: false # 	申请连接时直接检测连接是否有效  影响性能   拿到连接去 数据库执行 select 1
      test-on-return: false # 返回连接前是否需要进行测试  影响性能
      pool-prepared-statements: false # 不缓存PSTHMT oracal 可这么干其他不用

    dynamic:
      primary: master
      datasource:
        zk:
          url: jdbc:mysql://localhost:3306/zk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
          username: root
          password: root

4. yml 中mysql密码加密

  username: root
  password: ENC(sLwAb9X+OHray3HpbGW83w==)

相信看到这里会发现密码进行了加密

Jasypt 是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。jasypt库与springboot集成,在实际开发中非常方便。

依赖

   <!--jasypt配置加密-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

代码

            String input = scanner.next();
            BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
            textEncryptor.setPassword("abcdef"); // 用您自己的密钥替换"yourSecretKey"

            String encryptedString = textEncryptor.encrypt(input);
            String decrypt = textEncryptor.decrypt(encryptedString);
            System.out.println("加密后的字符串为: " + encryptedString);
            System.out.println("解密后的字符串为: " + decrypt);

配置文件里面就可以放入加密后的字符串  用 ENC() 包裹

秘钥配置需要和加密的秘钥一致:

  • 方式1: 配置文件里面直接加上
  • 方式2:项目打包部署直接写到命令里面
java -jar  -Djasypt.encryptor.password=abcdef renren-gdrc.jar 
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      primary: master
      datasource:
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://xxxx:3306/customer_gdrc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
          username: cm
          password: ENC(/SvYhN/CL3MiDXlTH5WSmw==)

# 加密的秘钥
jasypt:
  encryptor:
    password: abcdef

5. 补充:外部jar打包进项目

参考:SpringBoot项目如何引入外部jar及将外部jar打包到项目发布jar包

pom 依赖

        <dependency>
            <groupId>com.aisec.iam</groupId>
            <artifactId>iamsdk.base.util</artifactId>
            <version>1.0.0</version>
            <!--
            scope=system表示此依赖是来自外部jar,而不是maven仓库
            注意:
              只有当scope设置为system时,systemPath属性才会生效
              systemPath是一个物理文件路径,来指定依赖的外部jar在物理磁盘的位置
              ${project.basedir}代表项目根目录
        -->
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/iam-sdk-1.0.0.jar</systemPath>
        </dependency>

将外部jar包打包到当前项目jar包中

pom 增加内容

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
					<!-- 在打包时将引用的外部jar引入到当前项目包中	-->
					<includeSystemScope>true</includeSystemScope>
				</configuration>
			</plugin>
		</plugins>
	</build>
    <resources>
			<resource>
				<!-- directory 表示取该目录下的文件 -->
				<directory>lib</directory>
				<!--targetPath 指定打包到哪个目录下  默认是放到class目录下-->
				<targetPath>/BOOT-INF/lib/</targetPath>
				<!-- 取符合格式的所有文件  *代表全部 -->
				<includes>
					<include>**/*.jar</include>
				</includes>
			</resource>
		</resources>
	</build>

这样再打包 外部的jar就会被一同打入到jar包中了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值