编辑:我已经更新了文章,以反映在下面的意见的问题,但总的来说,所有的人都这样做,但问题仍然存在如何将EntityManager注入Spring Integration bean?
我试图找到一种方式来注入春天-managed EntityManager加入到处理Spring Integration工作流数据库更新部分的bean中。
由于某些原因,我在尝试引用EM实例时不断收到NullPointerException。
我的设置是如下:
@Component
public class BranchDeploymentUpdater {
@PersistenceContext(unitName = "MyPU")
private EntityManager em;
public File handleUpdate(File input) {
.....
String query = "some query";
TypedQuery<MyClass> typedQuery = em.CreateQuery(query, MyClass.class);
.....
}
}
我的persistence.xml已被配置如下:
<persistence-unit name="MyPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://192.168.2.169:3306/MYDB" />
<property name="javax.persistence.jdbc.user" value="user" />
<property name="javax.persistence.jdbc.password" value="[email protected]" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<!-- Connection Pooling -->
<property name="hibernate.connection.provider_class"
value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.max_size" value="100" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.acquire_increment" value="5" />
<property name="hibernate.c3p0.idle_test_period" value="500" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.timeout" value="10000" />
</properties>
</persistence-unit>
我的部件扫描在springapp-servlet.xml中文件声明如下和使用EM的类别被确认为在声明的包装中:
<context:component-scan base-package="com.myapp.webapp.controller, com.myapp.integration" />
NPE会发生在em.CreateQuery
声明。
在这个相同的项目中,我也有一个MVC webapp,我正在使用完全相同的方式将EM注入到控制器类中,并且它可以工作。
任何人都可以指出我可能会得到它错误的地方吗?
目前,我正在通过实例化一个新的EM每当bean被调用,但如果我在太多的交易泵浦导致一个脱离连接错误。
请注意,我没有使用Spring Integration的数据库适配器,因为我已经有处理数据库层的JPA代码并想保留该图层。
感谢 黄
如何在persistence.xml中定义持久性单元?也许持久性单元名称不匹配。 –
BranchDeploymentUpdater所在的软件包是否由组件扫描覆盖? – shazin
我希望BranchDeploymentUpdater是一个Spring bean,因为在上面的代码片段中没有任何@Component注释或类似的东西。 –