fix ArrayStoreException during parsing annotations (#519)

* Avoid using @ConditionalOnClass with @Bean
This commit is contained in:
moon0705 2023-07-05 17:19:07 +08:00 committed by GitHub
parent 0f6d587d7f
commit 839cf3ce6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -27,11 +27,9 @@ import com.baomidou.dynamic.datasource.creator.hikaricp.HikariDataSourceCreator;
import com.baomidou.dynamic.datasource.creator.jndi.JndiDataSourceCreator;
import com.baomidou.dynamic.datasource.tx.AtomikosTransactionFactory;
import com.zaxxer.hikari.HikariDataSource;
import lombok.RequiredArgsConstructor;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.transaction.TransactionFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
@ -40,8 +38,6 @@ import org.springframework.core.annotation.Order;
* @author TaoYu
*/
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(DynamicDataSourceProperties.class)
public class DynamicDataSourceCreatorAutoConfiguration {
public static final int JNDI_ORDER = 1000;
@ -51,7 +47,6 @@ public class DynamicDataSourceCreatorAutoConfiguration {
public static final int DBCP2_ORDER = 5000;
public static final int ATOMIKOS_ORDER = 6000;
public static final int DEFAULT_ORDER = 7000;
private final DynamicDataSourceProperties properties;
@Bean
@Order(DEFAULT_ORDER)
@ -68,58 +63,76 @@ public class DynamicDataSourceCreatorAutoConfiguration {
/**
* 存在Druid数据源时, 加入创建器
*/
@Bean
@Order(DRUID_ORDER)
@ConditionalOnClass(DruidDataSource.class)
public DruidDataSourceCreator druidDataSourceCreator() {
return new DruidDataSourceCreator(properties.getDruid());
@Configuration
static class DruidDataSourceCreatorConfiguration {
@Bean
@Order(DRUID_ORDER)
public DruidDataSourceCreator druidDataSourceCreator(DynamicDataSourceProperties properties) {
return new DruidDataSourceCreator(properties.getDruid());
}
}
/**
* 存在Hikari数据源时, 加入创建器
*/
@Bean
@Order(HIKARI_ORDER)
@ConditionalOnClass(HikariDataSource.class)
public HikariDataSourceCreator hikariDataSourceCreator() {
return new HikariDataSourceCreator(properties.getHikari());
@Configuration
static class HikariDataSourceCreatorConfiguration {
@Bean
@Order(HIKARI_ORDER)
public HikariDataSourceCreator hikariDataSourceCreator(DynamicDataSourceProperties properties) {
return new HikariDataSourceCreator(properties.getHikari());
}
}
/**
* 存在BeeCp数据源时, 加入创建器
*/
@Bean
@Order(BEECP_ORDER)
@ConditionalOnClass(BeeDataSource.class)
public BeeCpDataSourceCreator beeCpDataSourceCreator() {
return new BeeCpDataSourceCreator(properties.getBeecp());
@Configuration
static class BeeCpDataSourceCreatorConfiguration {
@Bean
@Order(BEECP_ORDER)
public BeeCpDataSourceCreator beeCpDataSourceCreator(DynamicDataSourceProperties properties) {
return new BeeCpDataSourceCreator(properties.getBeecp());
}
}
/**
* 存在Dbcp2数据源时, 加入创建器
*/
@Bean
@Order(DBCP2_ORDER)
@ConditionalOnClass(BasicDataSource.class)
public Dbcp2DataSourceCreator dbcp2DataSourceCreator() {
return new Dbcp2DataSourceCreator(properties.getDbcp2());
@Configuration
static class Dbcp2DataSourceCreatorConfiguration {
@Bean
@Order(DBCP2_ORDER)
public Dbcp2DataSourceCreator dbcp2DataSourceCreator(DynamicDataSourceProperties properties) {
return new Dbcp2DataSourceCreator(properties.getDbcp2());
}
}
/**
* 存在Atomikos数据源时, 加入创建器
*/
@Bean
@Order(ATOMIKOS_ORDER)
@ConditionalOnClass({AtomikosDataSourceBean.class})
public AtomikosDataSourceCreator atomikosDataSourceCreator() {
return new AtomikosDataSourceCreator(properties.getAtomikos());
}
@ConditionalOnClass(AtomikosDataSourceBean.class)
@Configuration
static class AtomikosDataSourceCreatorConfiguration {
@Bean
@ConditionalOnClass({AtomikosDataSourceBean.class, TransactionFactory.class})
public TransactionFactory atomikosTransactionFactory() {
return new AtomikosTransactionFactory();
@Bean
@Order(ATOMIKOS_ORDER)
public AtomikosDataSourceCreator atomikosDataSourceCreator(DynamicDataSourceProperties properties) {
return new AtomikosDataSourceCreator(properties.getAtomikos());
}
@Bean
@ConditionalOnClass(TransactionFactory.class)
public TransactionFactory atomikosTransactionFactory() {
return new AtomikosTransactionFactory();
}
}
}