У меня есть кодовая база, которая используется для двух разных приложений.некоторые из моих весенних классов обслуживания имеют аннотацию @Transactional.При запуске сервера я хотел бы отключить @Transactional, основываясь на какой-то конфигурации.
Ниже приведен класс конфигурации.
@Configuration
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
public class WebAppConfig {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(url);
dataSource.setUsername(userId);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public PlatformTransactionManager txManager() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setIsolationLevel(TransactionDefinition.ISOLATION_DEFAULT);
if(appName.equqls("ABC")) {
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_NEVER);
}else {
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
}
CustomDataSourceTransactionManager txM=new CustomDataSourceTransactionManager(def);
txM.setDataSource(dataSource());
return txM;
}
@Bean
public JdbcTemplate jdbcTemplate() {
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource());
return jdbcTemplate;
}
}
Я пытаюсь вызвать методы в DataSourceTransactionManager, чтобы создать функциональность.Но все же он пытается зафиксировать / откатить транзакцию в конце транзакции.Поскольку нет доступного соединения с базой данных, это вызывает исключение.
Если я сохраняю @Transactional (распространение = Propagation.NEVER), все работает отлично, но я не могу изменить его, так как другое приложение использует ту же кодовую базу ив этом случае это необходимо.
Я хотел бы знать, есть ли возможность сделать транзакцию полностью отключенной из конфигурации без изменения аннотации @Transactional.