将ApacheCamel JPA producer与hibernate和普通JavaDSL结合使用
我不熟悉Camel,一直在尝试使用Hibernate轮询XML文件目录并写入数据库。为了理解所有东西是如何链接在一起的,我想在将它们移动到SpringXMLConfig之前,使用纯JavaDSL将所有东西连接起来。我使用bean和我自己的方法让它完全按照预期工作:将ApacheCamel JPA producer与hibernate和普通JavaDSL结合使用,hibernate,jpa,apache-camel,Hibernate,Jpa,Apache Camel,我不熟悉Camel,一直在尝试使用Hibernate轮询XML文件目录并写入数据库。为了理解所有东西是如何链接在一起的,我想在将它们移动到SpringXMLConfig之前,使用纯JavaDSL将所有东西连接起来。我使用bean和我自己的方法让它完全按照预期工作: class MyRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from
class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file://test")
.bean(parser, "parseXml")
.bean(parser, "store");
}
}
现在我想试用内置的JPA producer,因此我将其更改为:
class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file://test")
.bean(parser, "parseXml")
.to("jpa:soccerfeed?persistenceUnit=sportsstats");
}
}
但我得到了一个错误:
原因:org.hibernate.HibernateException:当没有可用连接时,必须设置“hibernate.dial”
我已经尝试将我的CamelContext与persistence.properties文件链接起来,该文件指定了我的hibernate.dial(适用于我的bean):
如何让Camel中的JPA端点在persistence.properties中获取设置
编辑:另一种选择似乎是将属性作为元素从属性文件移动到persistence.xml文件中。但是,如果可能的话,我希望避免这样做,因为这会使dev/prod版本的维护变得更加困难。有没有办法将persistence.xml链接到属性文件?(例如
public void setUp() throws Exception {
final Properties persistenceProperties = new Properties();
InputStream is = null;
try {
is = getClass().getClassLoader().getResourceAsStream("persistence.properties");
persistenceProperties.load(is);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ignored) {
}
}
}
entityManagerFactory = Persistence.createEntityManagerFactory("sportsstats", persistenceProperties);
context = JAXBContext.newInstance("sportsstats");
}
private void run() throws Exception {
camelContext = new DefaultCamelContext();
JpaComponent jpa = new JpaComponent();
jpa.setEntityManagerFactory(entityManagerFactory);
jpa.setCamelContext(camelContext);
Endpoint jpaEndpoint = jpa.createEndpoint("jpa:soccerfeed");
camelContext.addEndpoint("jpa:soccerfeed", jpaEndpoint);
// Add some configuration by hand ...
camelContext.addRoutes(new MyRouteBuilder());
// Now everything is set up - lets start the context
camelContext.start();
// keep alive
while(true) {
Thread.sleep(10000);
}
}