springboot 获取配置文件

springboot 获取配置文件,第1张

方法一:实体类映射

springboot配置文件 application.properties

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///xxx
jdbc.username=root
jdbc.password=root

实体类:对应配置文件,字段名需要和配置文件的一样。记得生成get set方法

这里prefix(前缀),顾名思义,如果配置文件是 ali.jdbc.url,那prefix = "ali.jdbc"

@ConfigurationProperties(prefix = "jdbc") //是springboot的注解,只能读取springboot的application的配置文件
public class AcctJdbcProperties {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

 有了上面的配置类,就需要使用它的配置值。

@EnableConfigurationProperties顾名思义,即使用ConfigurationProperties。

@Bean是返回一个实体,放到spring容器里,全局都可以使用。即,你想在某个类(这个类需要被spring管理)里用他,那声明成员变量,@Autowired注入即可。

@Configuration
@EnableConfigurationProperties(AcctJdbcProperties.class)//指定加载某个配置类
public class JdbcConfiguration {
    @Bean
    public DataSource getDataSource(AcctJdbcProperties jdbcProperties){
        DruidDataSource source = new DruidDataSource();
        source.setDriverClassName(jdbcProperties.getDriverClassName());
        source.setUrl(jdbcProperties.getUrl());
        source.setUsername(jdbcProperties.getUsername());
        source.setPassword(jdbcProperties.getPassword());
        return source;
    }
}

还有一种写法,不需要写实体类,这就需要配置文件的字段名和返回的类的字段名一样。

@Configuration
public class JdbcConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource getDataSource(){
        DruidDataSource source = new DruidDataSource();
        return source;
    }
}

如果是复杂系统,尤其是后期会和很多系统对接的,返回的类是第三方jar包的,而非自己服务里的,那不建议用这种,使用上面那种,自定义一个实体类。相当于加层防腐层做隔离。

方法二:只有配置文件(springboot集成了)

使用HikariDataSource

spring.datasource.url=jdbc:mysql://192.168.100.5:3306/acct?allowMultiQueries=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

使用Druid

spring.datasource.url=jdbc:mysql:///acct?useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=66634
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
方法三:通过spring的applicationContext获取
applicationContext.getEnvironment().getProperty("ali.jdbc.url");

这是比较自由的方式,在任何地方都可以使用,获取各种配置。

这种方式还有个好处,获取数组形式的配置方便。例如多数据源的配置信息。

ali:
  jdbc:
    defaultDataSourceId: trans
    databaseIdProvider: mysql
    dataSources:
      - id: trans
        pool:
          url: jdbc:oracle:thin:@192.168.12.3:1521:orcl
          driverClassName: oracle.jdbc.driver.OracleDriver
          username: ali_trans
          password: ali_trans
          initialSize: 1
          minIdle: 1
          maxActive: 20
          maxWait: 60000
        configLocation: classpath:conf/mybatis.xml
        mybatisPath: classpath*:mybatis/*.xml,classpath*:mapper/trans/*.xml,
      - id: oa
        pool:
          url: jdbc:mysql://192.168.100.3:3306/ali_oa?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
          driverClassName: com.mysql.cj.jdbc.Driver
          username: root
          password: 999999
          initialSize: 1
          minIdle: 1
          maxActive: 20
          maxWait: 60000
        configLocation: classpath:conf/mybatis.xml
        mybatisPath: classpath*:mybatis/*.xml,classpath*:mapper/oa/*.xml
applicationContext.getEnvironment().getProperty("ali.jdbc.dataSources[0].id");
applicationContext.getEnvironment().getProperty("ali.jdbc.dataSources[0].pool.url");

//用for循环获取
applicationContext.getEnvironment().getProperty("ali.jdbc.dataSources[" + i + "].id");
//如果i超过了,获取不到返回的是null

方法四:@Value

SpringBoot读取yml文件中配置数组的2种方法 - 编程宝库

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存