2017-04-24 1 views
0

J'utilise le proxy CGLib (AOP). Existe-t-il une solution de contournement lorsque ComboPooledDataSource est la classe finale car @RefreshScope ne fonctionne pas sur la classe finale?Printemps @RefreshScope ne fonctionne pas sur la classe finale ComboPooledDataSource

@Bean(name = "portalDataSource", destroyMethod = "close") 
@RefreshScope 
public DataSource dataSource() Integer iMaxConTimeout) throws Exception { 
    ComboPooledDataSource cpds = new ComboPooledDataSource(); 
    cpds.setDriverClass("com.mysql.jdbc.Driver"); //loads the jdbc driver 
    cpds.setJdbcUrl("...."); 
    cpds.setUser("..."); 
    cpds.setPassword("..."); 


    // the settings below are optional -- c3p0 can work with defaults 
    cpds.setMinPoolSize(iMinDBCons); 
    cpds.setMaxPoolSize(iMaxDBCons); 
    cpds.setMaxIdleTime(iMaxConTimeout);  
    return cpds; 
} 

La classe finale ComboPooledDataSource fait partie du pool de connexions c3p0.

<!-- Hibernate c3p0 connection pool --> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-c3p0</artifactId> 
    <version>5.0.4.Final</version> 
</dependency> 

Répondre

0

Étape 1: Créer une classe appelée SigComboPooledDataSource

public class SigComboPooledDataSource extends TransactionAwareDataSourceProxy { 

    @Autowired 
    // Inject your class by constructor 
    SigComboPooledDataSource(ComboPooledDataSource dataSource) { 
     super.setTargetDataSource(dataSource); 
    } 

    public void close() { 
     ((ComboPooledDataSource) super.getTargetDataSource()).close(); 
    } 

} 

Étape 2

@Bean(name = "portalDataSource", destroyMethod = "close") 
@RefreshScope 
public DataSource dataSource() Integer iMaxConTimeout) throws Exception { 

    ComboPooledDataSource cpds = new ComboPooledDataSource();  
    cpds.setDriverClass("com.mysql.jdbc.Driver"); //loads the jdbc driver  
    cpds.setJdbcUrl("....");  
    cpds.setUser("..."); 
    cpds.setPassword("..."); 
    cpds.setPassword("..."); 

    // the settings below are optional -- c3p0 can work with defaults 
    cpds.setMinPoolSize(iMinDBCons); 
    cpds.setMaxPoolSize(iMaxDBCons); 
    cpds.setMaxIdleTime(iMaxConTimeout);  
    return new SigComboPooledDataSource(cpds); 
}