我有一个带有从JDNI加载的PostgreSQL数据源的Spring应用程序:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/DB" expected-type="javax.sql.DataSource" />
我用JDBCTemplate
连接了它// DataSource is Autowired
jdbcTemplate = new JdbcTemplate(dataSource);
和自动提交设置为true
<Resource name="jdbc/DB" auth="Container" type="javax.sql.DataSource"
username="postgres" password="localPostgres"
url="jdbc:postgresql://localhost:5432/postgres"
driverClassName="org.postgresql.Driver"
defaultAutoCommit="true"/>
当我尝试使用简单的SQL insert语句插入项时,更改不会提交到数据库。
jdbcTemplate.update("INSERT INTO items (name, surname) VALUES ('samantha', 'catania')";
直接在数据库控制台中输入SQL语句,即插入项目,即SQL是正确的。
任何想法可能是什么问题?
答案 0 :(得分:0)
这个问题正在发生,因为我正在使用Spring Batch和我在Spring Batch创建的事务中完成的提交。在我的方法中添加@Transactional(Transactional.TxType.REQUIRES_NEW)
可以解决问题。
这个article描述了使用@Transactional
时常见的陷阱,这有助于我找到解决问题的方法。