在只读模式下不允许执行Spring Write操作

我知道关于这个问题已经存在很多问题了,但是大多数都是关于XML配置的,我正在使用注释。 我的IDE是IntelliJ,我使用Gradle作为我的构建系统。

所以我有一个非常简单的Web服务,我想启用登录和注册function。 我的DAO看起来像这样:

public class UserDAO implements IUserDAO { @Autowired private HibernateTemplate hibernateTemplate; @Override public void addUser(User user) { hibernateTemplate.save(user); } @Override public User findByUsername(String username) { return hibernateTemplate.execute(session -> (User) session.createCriteria(User.class) .add(Restrictions.eq("username", username)) .uniqueResult()); } } 

我的配置是这样的:

 @Configuration @EnableTransactionManagement public class AppConfig { @Bean public IUserDAO userDAO() { return new UserDAO(); } @Bean public HibernateTemplate hibernateTemplate() { return new HibernateTemplate(sessionFactory()); } @Bean public SessionFactory sessionFactory() { return new LocalSessionFactoryBuilder(getDataSource()) .addAnnotatedClasses(User.class) .buildSessionFactory(); } @Bean public DataSource getDataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://example.com:3306/myDatabase"); dataSource.setUsername("myUser"); dataSource.setPassword("myUser123"); return dataSource; } @Bean public HibernateTransactionManager hibTransMan() { return new HibernateTransactionManager(sessionFactory()); } } 

我在我的RestController使用它来获取DAO:

 @Autowired private IUserDAO userDAO; 

执行findByUsername工作正常并返回与给定用户名匹配的用户。 但是, addUser方法不起作用,并给我这个错误:

 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 

我环顾四周,发现我应该将@Transactional(readOnly = false)到我的函数中,所以我这样做了(我把它添加到我的addUser函数上面,如果它甚至是放置它的正确位置……),但是然后我收到这个错误:

 No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: hibTransMan,transactionManager 

任何人都可以帮我解决这个问题吗? 此外,对于任何IntelliJ用户,我的UserDAO中的@Autowired注释都会标记一个警告,指出Autowired members must be defined in the valid spring bean(@Component/@Service,etc.) 。 任何人都知道为什么会这样吗?

PS如果有人在我的findByUsername方法中被Lambda表达式findByUsername ,我使用的是Java 8。

我找到了解决方案,我将@Transactional(readOnly = false)注释添加到我的addUser方法,并将@PrimaryAppConfig类中的hibTransMan方法。 但是,关于@Autowired的警告仍然存在,有人知道为什么吗?