目录
24、自动装配-@Profile环境搭建
- Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能。
- 实际应用:开发环境、测试环境、正式环境 数据源切换
- 读取property文件的两种方法
- @Value 放到属性上
- @Value 放到方法参数上
- 通过aware方法,或去spring基础组件,然后获取参数
24.1 添加 数据源和jdbc驱动 pom 依赖
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
实例:
db.username=root
db.password=root
db.driveClassName=com.mysql.jdbc.Driver
package com.suirui.springanno.autowiredDemo.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.suirui.springanno.autowiredDemo.entity.Red;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.util.StringValueResolver;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
@Configuration
@PropertySource(value = {"classpath:/db.properties","classpath:/person.properties"})
public class MainConfigAutoWired2 implements EmbeddedValueResolverAware {
@Value("${db.username}")
private String username;
//通过EmbeddedValueResolverAware获取Spring值解析器,然后再去获取properties中的数据
StringValueResolver stringValueResolver;
//测试数据源
@Bean("dataSourceTest")
public DataSource dataSourceTest(@Value("${db.username}" )String pwd ) throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser(username);
dataSource.setPassword(pwd);
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
String driver = stringValueResolver.resolveStringValue("${db.driveClassName}");
dataSource.setDriverClass(driver);
return dataSource;
}
//开发数据源
@Bean("dataSourceDev")
public DataSource dataSourceDev(@Value("${db.username}" )String pwd ) throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser(username);
dataSource.setPassword(pwd);
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dev");
String driver = stringValueResolver.resolveStringValue("${db.driveClassName}");
dataSource.setDriverClass(driver);
return dataSource;
}
//生产环境
@Bean("dataSourceProd")
public DataSource dataSourceProd(@Value("${db.username}" )String pwd ) throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser(username);
dataSource.setPassword(pwd);
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/prod");
String driver = stringValueResolver.resolveStringValue("${db.driveClassName}");
dataSource.setDriverClass(driver);
return dataSource;
}
public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
this.stringValueResolver = stringValueResolver;
}
}
package com.suirui.springanno.autowiredDemo;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.suirui.springanno.autowiredDemo.config.MainConfigAutoWired;
import com.suirui.springanno.autowiredDemo.config.MainConfigAutoWired2;
import com.suirui.springanno.autowiredDemo.entity.Red;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.sql.DataSource;
import java.util.Map;
public class MainTestAutoWired2 {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfigAutoWired2.class);
String[] beanNamesForType = ac.getBeanNamesForType(DataSource.class);
for (String s : beanNamesForType) {
System.out.println(s);
}
Map<String, DataSource> beansOfType = ac.getBeansOfType(DataSource.class);
for (Map.Entry<String, DataSource> entry : beansOfType.entrySet()) {
System.out.println(entry.getKey());
ComboPooledDataSource ds = (ComboPooledDataSource) entry.getValue();
String user = ds.getUser();
String password = ds.getPassword();
String driverClass = ds.getDriverClass();
System.out.println("user: " + user + ",pwd: "+ password + ". driverClass: " + driverClass);
System.out.println("");
}
}
}