問題:
最近,在項目開發的過程中,遇到需要在properties文件中定義一些自定義的變量,以供java程序動態的讀取,不需要在進行查找修改代碼。只針對於Springboot 使用
開發環境:
SpringBoot 2.1.0.RELEASE
Maven 3.3.9
Jdk 1.8
Idea 2018.1.2
三種常用的配置方式:以讀取數據源的配置屬性為例
第一種 java通用的配置方式:利用@Value注解
第一步:用IDEA 工具快速構建一個springboot 的web project 目錄結構如下

第二步:pom文件 添加依賴
<?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>cn.bearhunting</groupId>
<artifactId>configdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>configdemo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--采用的是阿里巴巴的druid數據源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第三步:創建要讀取得配置文件 jdbc.properties,並添加屬性值。

# 配置驅動 jdbc.driverClassName = com.mysql.jdbc.Driver # 數據庫連接得url jdbc.url = jdbc:mysql://localhost:3306/test # 連接數據庫的用戶名 jdbc.username = root # 鏈接數據庫得密碼 jdbc.password = root
第四步:獲取屬性值,注入屬性值
先創建一個配置類
package cn.bearhunting.configdemo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
/**
* @ClassName: jdbcConfig
* @discription: 數據源屬性配置
* @author: lele
* @create: 2018-11-28 15:34
*/
@Configuration
@PropertySource("classpath:jdbc.properties")
public class jdbcConfig {
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource dataSource =new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
注解說明:
@Configration
用於定義聲明配置類,等同於xml配置文件
@PropertySource
可以點進去看源碼,里面有示例

@Value("${jdbc.driverClassName}")
讀取配置文件的屬性值
@Bean 配合@Configration使用,作用在方法上,相當於xml配置文件<bean><?bean>
第五步:測試類 DUG 測試結果
package cn.bearhunting.configdemo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.sql.DataSource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Autowired
private DataSource dataSource;
@Test
public void contextLoads() {
System.out.println(dataSource);
}
}
獲取數據成功

第二種方法:springboot 的配置方式
第三步,要把jdbc.properties 文件名改成 application.properties (application.properties是springboot的默認的配置文件,會自動讀取)

第四步,創建一個JdbcProperties屬性配置類如下
package cn.bearhunting.configdemo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @ClassName: JdbcProperties
* @discription:
* @author: lele
* @create: 2018-11-28 16:25
*/
@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
}
@ConfigrationProperties(prefix = "jdbc")
指定前綴,屬性文件的屬性名和配置類的屬性名要完全一致;
@Data
了解一下lombok 此處不做說明,作用是不用寫set get 方法
第五步 將JdbcConfig 類進行改寫
package cn.bearhunting.configdemo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @ClassName: jdbcConfig
* @discription: 數據源屬性配置
* @author: lele
* @create: 2018-11-28 15:34
*/
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class jdbcConfig {
@Bean
public DataSource getDataSource(JdbcProperties jdbcProperties){
DruidDataSource dataSource =new DruidDataSource();
dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
dataSource.setUrl(jdbcProperties.getUrl());
dataSource.setUsername(jdbcProperties.getUsername());
dataSource.setPassword(jdbcProperties.getPassword());
return dataSource;
}
}
注解說明:
@EnableConfigurationProperties(JdbcProperties.class)
開啟使用屬性配置類 JdbcProperties
最后獲取數據成功
第三種,最簡潔的一種
不需要屬性配置類 ,直接注入
package cn.bearhunting.configdemo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @ClassName: jdbcConfig
* @discription: 數據源屬性配置
* @author: lele
* @create: 2018-11-28 15:34
*/
@Configuration
public class jdbcConfig {
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource getDataSource(){
return new DruidDataSource();
}
}
