我是 Camel 的新手,并且一直在尝试使用 Hibernate 轮询 XML 文件的目录并写入数据库。为了了解所有内容如何链接在一起,我想在将其移动到 Spring xml 配置之前使用直接的 Java DSL 将所有内容连接起来。我使用 bean 和我自己的方法让它完全按预期工作:
class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file://test")
.bean(parser, "parseXml")
.bean(parser, "store");
}
}
现在我想试试内置的 JPA 生产者,所以我把它改成了:
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.dialect”
我试图将我的 CamelContext 与我的 persistence.properties 文件链接起来,该文件指定了我的 hibernate.dialect (适用于我的 bean):
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);
}
}
如何让我在 Camel 中的 JPA 端点获取我在 persistence.properties 中的设置?
编辑:似乎替代方法是将属性从我的属性文件移动到我的 persistence.xml 文件中作为元素。但是,如果可能的话,我想避免这样做,因为它会使开发/产品版本的维护变得更加困难。有没有办法将 persistence.xml 链接到属性文件?(例如 <properties file="persistence.properties" /> 什么的?)