我正在尝试在 Spring Boot 应用程序中实现自定义事务缓存。我已经创建了自己的 AbstractPlatformTransactionManager 实现和一些单元测试,它们显示事务按预期工作。然而,真正的应用程序忽略了我的事务管理器——它的方法永远不会被调用。我做错了什么?谢谢你。
事务管理器实现:
@Component
public class CacheTransactionManager extends AbstractPlatformTransactionManager{
@Override
protected Object doGetTransaction() throws TransactionException {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
缓存事务配置:
@Configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
public class CacheTransactionConfiguration {
@Bean(name = "cacheTransactionManager")
public PlatformTransactionManager cacheTransactionManager() {
return new CacheTransactionManager();
}
Run Code Online (Sandbox Code Playgroud)
}
自定义事务注释(我也试过没有这个,但没有区别):
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(value = "cacheTransactionManager", rollbackFor = Exception.class)
public @interface CacheTransactional {
}
Run Code Online (Sandbox Code Playgroud)
缓存服务:
@Component
public class CacheService {
@CacheTransactional
public void add(Object o){
...
}
}
Run Code Online (Sandbox Code Playgroud)
工作 JUnit 测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = …Run Code Online (Sandbox Code Playgroud) 我有一个带有lambda表达式的检票口项目。在用户单击后退按钮的一页上,我的应用程序崩溃:
java.lang.IllegalArgumentException: Invalid lambda deserialization
at x.y.z.MyPage$3.$deserializeLambda$(MyPage.java:1)
Run Code Online (Sandbox Code Playgroud)
在页面类(我返回的地方)中,我使用lambda表达式实现此接口:
public interface Localizator extends Serializable {
String getLocalizedString(String key);
}
Run Code Online (Sandbox Code Playgroud)
和lambda:
protected void someMethod() {
localize((String key) -> getString(key));
}
Run Code Online (Sandbox Code Playgroud)
当我将lambda更改为匿名类时,一切正常。在这种情况下应如何使用lambda?
信封:Java 1.8.0_25,Netbeans 8.0.2,Wicket 6.17.0。
编辑:这是带有lambda的真实(但简化)方法:
@Override
protected DataLoader createDataLoader() {
return new DataLoader(){
@Override
public List loadData() {
...
}
@Override
public List convertToTableRows(List data) {
return Converter.asRowList(
data,
(Record record) -> {...}, // this lambda is OK
(String key) -> getString(key)); // this lambda is crashing
}
@Override
public List …Run Code Online (Sandbox Code Playgroud) 我在amazon elasticbeanstalk上测试我的弹簧启动应用程序,它不和flyway一起工作.当我在本地tomcat上部署应用程序(或使用spring boot运行)时,一切正常.此外,当我禁用flyway(属性flyway.enabled = false)时,应用程序正在处理aws.
但是,启用flyway后,应用程序部署失败,并出现以下异常:
2016-12-30 09:52:12.036 DEBUG 10656 --- [ost-startStop-1] o.f.core.internal.command.DbSchemas : Schema `ebdb` already exists. Skipping schema creation.
2016-12-30 09:52:12.056 WARN 10656 --- [ost-startStop-1] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to check whether schema `ebdb` is empty
2016-12-30 09:52:12.074 WARN 10656 --- [ost-startStop-1] o.s.boot.SpringApplication : Error handling failed (Error …Run Code Online (Sandbox Code Playgroud)