我正在尝试将一个服务注释类注入Spring Boot应用程序中的配置类,但它没有被注入(设置为null),我认为这是由于Spring生命周期.
此外,这个服务有一个使用构造函数注入的重载构造函数,我想这也是一个问题,因为自动装配作用于默认构造函数.但是,该服务需要进行Spring配置,因此我不认为可以在Bean注释方法中创建新实例.
怎么解决这个问题?
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private SessionService sessionService;
@Bean
public SessionService sessionService() {
return sessionService;
}
}
public interface SessionService extends BaseCacheService<Session> {
void extendExpiration(String key);
String getSessionId(String key);
}
@Service
public class SessionServiceImpl implements SessionService {
private Environment environment;
private UserService userService;
@Autowired
public SessionServiceImpl(Environment environment, UserService userService) {
this.environment = environment;
this.userService = userService;
}
}
Run Code Online (Sandbox Code Playgroud)
我在使用JPA-1.0,Hibernate和MySQL 5.0.84(innoDB表)以及Postgres 8.1.11(用于不同客户端的不同数据库)的并发事务中遇到问题。我已经阅读了有关JPA事务的规范,所以我不知道是否缺少有关配置的信息,并且根据我遇到的问题,我需要为事务注释指定特定的隔离级别。我这样做了,但是它只是一起关闭了事务,因此没有任何东西能够持久/更新。
我正在做的是,将HTTP帖子启动到Web服务器(在我的情况下为tomcat)中,然后在HTTP请求进入时尝试生成多个数据库事务。每个事务包含1次插入和2次更新。但是,该问题似乎总是在基于先前插入的最终更新中发生。因此,我插入记录A,然后更新记录B,它是记录A的外键。
以下是我在执行单个http请求时获得的日志记录:
org.springframework.orm.jpa.JpaTransactionManager:365 - Creating new transaction with name [biz.cytrus.overlord.v2.core.ExecutionLogAPI.create]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
org.springframework.orm.jpa.JpaTransactionManager:323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@221f81] for JPA transaction
org.springframework.orm.jpa.JpaTransactionManager:355 - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@9f5742]
org.springframework.orm.jpa.JpaTransactionManager:752 - Initiating transaction commit
org.springframework.orm.jpa.JpaTransactionManager:462 - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@221f81]
org.springframework.orm.jpa.JpaTransactionManager:548 - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@221f81] after transaction
org.springframework.orm.jpa.EntityManagerFactoryUtils:329 - Closing JPA EntityManager
Run Code Online (Sandbox Code Playgroud)
以下是在同时执行多个http请求时获得的日志记录:
org.hibernate.util.JDBCExceptionReporter:357 - SQL Error: 1213, SQLState: 40001
org.hibernate.util.JDBCExceptionReporter:454 - Deadlock found when trying to get lock; try restarting transaction
org.hibernate.event.def.AbstractFlushingEventListener:532 …Run Code Online (Sandbox Code Playgroud)