配置文件(jdbc.properties) java
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test jdbc.username=root jdbc.password=123
編寫一個配置類mysql
1 @Configuration 2 @PropertySource("classpath:jdbc.properties") 3 public class JdbcConfig { 4 5 @Value("${jdbc.url}") 6 String url; 7 @Value("${jdbc.driverClassName}") 8 String driverClassName; 9 @Value("${jdbc.username}") 10 String username; 11 @Value("${jdbc.password}") 12 String password; 13 14 @Bean 15 public DataSource dataSource() { 16 DruidDataSource dataSource = new DruidDataSource(); 17 dataSource.setUrl(url); 18 dataSource.setDriverClassName(driverClassName); 19 dataSource.setUsername(username); 20 dataSource.setPassword(password); 21 return dataSource; 22 } 23 }
註解解讀
@Configuration: 聲明JdbcConfig是一個配置類
@PropertySource: 指定屬性文件的路徑
@value: 經過@value爲屬性注入值
@Bean: 經過dataSource()方法聲明爲一個註冊Bean的方法,Spring會自動調用該方法,該方法的返回值會加入到Spring的容器中
而後就能夠在任何位置注入DataSource
當配置上屬性後即可以注入任何類使用了spring
1 @RestController 2 public class HelloController { 3 4 @Autowired 5 private DataSource dataSource; 6 @Autowired 7 private JdbcConfig jdbcConfig; 8 9 @GetMapping("hello") 10 public String hello() { 11 System.out.println(jdbcConfig.getDriverClassName()+"=="+jdbcConfig.getUrl()); 12 return "hello, spring boot!" + dataSource; 13 } 14 15 }
打印結果sql
以上方法的注入方式,雖然屬性數據注入進去了,可是不夠強大,由於他只能注入基本數據類型。app
在SpringBoot中,提供了一種新的屬性注入方式,支持各類java基本數據類型及複雜數據類型ui
接下來咱們從新建立一個類,用來屬性注入url
1 @Data 2 @ConfigurationProperties(prefix = "jdbc") 3 public class SpringBootProperty { 4 private String url; 5 private String driverClassName; 6 private String username; 7 private String password; 8 9 }
註解解析:
@ConfigurationProperties註解聲明當前類爲屬性讀取類
prefix:讀取數據文件中,前綴爲jdbc的值
在類上定義各個屬性,名稱必須與屬性文件中jdbc.後面部分一致
屬性文件是定義在application.yml文件中的
1 spring: 2 application: 3 name: property 4 server: 5 port: 8083 6 jdbc: 7 driverClassName: com.mysql.jdbc.Driver 8 url: jdbc:mysql://127.0.0.1:3306/test 9 username: root 10 password: 123
接下來在要使用的地方經過spa
@EnableConfigurationProperties(SpringBootProperty.class)來聲明要使用SpringBootProperty這個類的對象
1 @RestController 2 @EnableConfigurationProperties(SpringBootProperty.class) 3 public class HelloController { 4 5 @Autowired 6 private SpringBootProperty springBootProperty; 7 @Autowired 8 private DataSource dataSource; 9 @Autowired 10 private JdbcConfig jdbcConfig; 11 12 @GetMapping("hello") 13 public String hello() { 14 System.out.println("SpringBoot推薦的屬性注入方式: " + springBootProperty.getDriverClassName() + "==" + springBootProperty.getUrl()); 15 return "hello, spring boot!"; 16 } 17 }
啓動類code
1 @SpringBootApplication 2 public class App { 3 public static void main(String[] args) { 4 SpringApplication.run(App.class); 5 6 } 7 }
End......server