2017-03-01 51 views
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 
    } 

    } 
+0

你尝试自动装配数据源则在该方法使用? –

+0

你为什么想这样做?为什么'datasourceUse'方法?谁会打电话给他?只需在需要的地方自动装载数据源。 Spring会根据活动配置文件自动调用数据源。或者你有两个配置文件(开发和战争)同时激活? –

+0

如果在春天的上下文中有一个类,你可以自动装载数据源然后使用它。您可以创建@component的配置类,并且可以使用数据源。 –

回答

0

使用它象下面这样:

@Autowired 
public void datasourceUse(DataSource dataSource) { 
    System.out.println(dataSource); 
} 
相关问题