@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;
}
}
如果我保留@transactional(propagation=propagation.never),那么所有的东西都可以很好地工作,但是我不能修改它,因为另一个应用程序正在使用相同的代码库,在这种情况下,它是必要的。
我想知道是否有一个使事务从配置完全禁用而不修改@transactional注释。
我不确定它是否可行,但您可以尝试实现自定义TransactionInterceptor
并通过删除事务性内容来覆盖它的方法,该方法将调用包装到事务中。类似这样的事情:
public class NoOpTransactionInterceptor extends TransactionInterceptor {
@Override
protected Object invokeWithinTransaction(
Method method,
Class<?> targetClass,
InvocationCallback invocation
) throws Throwable {
// Simply invoke the original unwrapped code
return invocation.proceedWithInvocation();
}
}
然后在@configuration
类中声明一个条件bean
// assuming this property is stored in Spring application properties file
@ConditionalOnProperty(name = "turnOffTransactions", havingValue = "true"))
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public TransactionInterceptor transactionInterceptor(
/* default bean would be injected here */
TransactionAttributeSource transactionAttributeSource
) {
TransactionInterceptor interceptor = new NoOpTransactionInterceptor();
interceptor.setTransactionAttributeSource(transactionAttributeSource);
return interceptor;
}
也许你需要更多的配置,我现在无法确认
我想实现以下目标: 在“开发”模式下,在当前webapp中执行Spring云配置 因此,当前webapp的类路径包含对配置服务器和客户端的依赖关系: 在开发模式下,并在引导程序中具有以下属性。yml,没问题(嵌入式配置服务器已配置并启动) 当不在'dev'模式(例如spring.profiles.active=prod)时,当前的webapp不会启动:它无法自动装配我的属性(我猜嵌入式服务器是以错
我不确定我是否很好地理解了Spring概要文件是如何处理yaml和属性文件的。我试图将这两种类型的配置分开(这两个文件不共享任何配置),但在从yaml配置中读取配置文件时遇到了问题。 我的问题是,当我试图(通过xml)配置我的数据源时,这样做: Spring总是使用YAML文件中的最后一个配置,忽略概要文件。我试图通过web.xml中的contex-parameter或直接将活动概要文件传递给JV
问题内容: 有人可以告诉我如何使用Java为我的客户firefox配置文件禁用插件吗?我发现有几个网站显示要添加加载项,但是关于禁用插件一无所获。 我的Firefox配置文件: 问题是默认情况下启用了某些插件。Adobe Acrobat,Google Update,Java,Microsoft Office,Flash,Director和Silverlight的Shockwave。 我需要禁用其中
问题内容: 有人可以告诉我如何使用Java为我的客户firefox配置文件禁用插件吗?我发现有几个网站显示要添加加载项,但是关于禁用插件一无所获。 我的Firefox配置文件: 问题是默认情况下启用了某些插件。Adobe Acrobat,Google Update,Java,Microsoft Office,Flash,Director和Silverlight的Shockwave。 我需要禁用其中
我正在试着做一双Spring靴。通过AWS ElasticBeanstalk制作罐子。一切正常,配置文件为“默认”。有人知道如何为java ElasticBeanstalk应用程序(而不是tomcat)设置活动配置文件(spring.profiles.active)吗。我总是得到“无活动配置文件集,返回默认配置文件:默认”。有没有办法直接设置虚拟机选项? 我已经在AWS管理控制台中设置了“spri
目录: 在配置项目yml文件中: 问题: null 客户端YML: 有没有人知道我怎样才能在这两种情况下只带一个配置文件?