小编Raz*_*een的帖子

如何在@Configuration类中自动装配Spring注释的服务类?

我正在尝试将一个服务注释类注入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)

如果我排除@Bean方法,那么我得到一个编译错误: 如果找不到bean,则自动发送编译错误

java spring-boot

5
推荐指数
1
解决办法
2万
查看次数

JPA并发事务

我在使用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)

java mysql postgresql jpa transactions

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

jpa ×1

mysql ×1

postgresql ×1

spring-boot ×1

transactions ×1