2017-03-01 70 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); 
} 
相關問題