0
在spring引导项目中,有没有一种方法可以在@Bean方法中使用注入对象。在我的例子以下,isdatasourceUse()
方法能够acccess注入数据源(无论是从开发或战争轮廓)在其他Bean中注入的Bean方法中的Access数据源方法
@EnableScheduling
@Configuration
@EnableAspectJAutoProxy
@Profile({ "dev", "war" })
public class AppConfig {
Logger logger = LoggerFactory.getLogger(AppConfig.class);
@Autowired
DBPropertyBean dbPropertyBean;
@Bean(destroyMethod = "")
@Profile("war")
public DataSource jndiDataSource() throws IllegalArgumentException, NamingException {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName(dbPropertyBean.getJndiName());
bean.setProxyInterface(DataSource.class);
bean.setLookupOnStartup(false);
bean.afterPropertiesSet();
return (DataSource) bean.getObject();
}
@Bean(destroyMethod = "close")
@Profile("dev")
public DataSource getDataSource() throws Exception {
com.mchange.v2.c3p0.ComboPooledDataSource ds = new com.mchange.v2.c3p0.ComboPooledDataSource();
ds.setUser(dbPropertyBean.getDsUsername());
ds.setPassword(dbPropertyBean.getDsPassword());
ds.setJdbcUrl(dbPropertyBean.getDsJdbcUrl());
ds.setDriverClass(dbPropertyBean.getDsDriverClass());
ds.setMaxPoolSize(dbPropertyBean.getDsMaxPoolSize());
ds.setMinPoolSize(dbPropertyBean.getDsMinPoolSize());
ds.setInitialPoolSize(dbPropertyBean.getDsInitPoolSize());
ds.setAcquireIncrement(dbPropertyBean.getDsAcquireInc());
ds.setAcquireRetryAttempts(dbPropertyBean.getDsAcquireRetryAtt());
ds.setPreferredTestQuery(dbPropertyBean.getPreferredTestQuery());
ds.setIdleConnectionTestPeriod(dbPropertyBean.getIdleConnectionTestPeriod());
return ds;
}
@Bean
public void datasourceUse() {
//How to user datasource here
}
}
你尝试自动装配数据源则在该方法使用? –
你为什么想这样做?为什么'datasourceUse'方法?谁会打电话给他?只需在需要的地方自动装载数据源。 Spring会根据活动配置文件自动调用数据源。或者你有两个配置文件(开发和战争)同时激活? –
如果在春天的上下文中有一个类,你可以自动装载数据源然后使用它。您可以创建@component的配置类,并且可以使用数据源。 –