Bean初始化前,对某些属性进行校验,满足校验才去装配数据源
为了处理这样的场景,需要用到**@Conditional注解,同时需要配合另外一个接口Condition**(org.springframework.context.annotation.Condition)
使用属性初始化数据库连接池:加入了@Conditional注解,并且配置了类DatabaseConditional
@Bean(name = "dataSource", destroyMethod = "close")
@Conditional(DatabaseConditional.class)
public DataSource getDataSource() {
Properties props = new Properties();
props.setProperty("driver", "com.mysql.jdbc.Driver");
props.setProperty("url", "jdbc:mysql://localhost:3306/chapter3");
props.setProperty("username", "root");
props.setProperty("password", "123456");
DataSource dataSource = null;
try {
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
e.printStackTrace();
}
return dataSource;
}
DatabaseConditional类:实现了Condition接口,重写matches方法,matches方法首先读取其上下文环境,然后判定是否已经配置了对应的数据库信息。当这些都已经配置好后则返回true。这个时候Spring会装配数据库连接池的Bean,否则是不装配的。
public class DatabaseConditional implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment env = context.getEnvironment();
return env.containsProperty("database.driverName") &&
env.containsProperty("database.url") &&
env.containsProperty("database.username") &&
env.containsProperty("database.password");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)