TomEE配置MySQL数据源未生效 实际使用HSQL数据库问题求助
问题根因与遗漏配置说明
你遇到的OpenJPA自动连接HSQL数据库的问题,是配置未被TomEE内核正确识别、触发内置默认数据源兜底导致的,具体错误点和遗漏配置如下:
- persistence.xml文件名与路径错误:你当前使用的配置文件名为
.persistence.xml(文件名开头多了英文点,属于隐藏文件),且放置路径不符合规范。正确要求是使用无前置点的persistence.xml作为文件名,且必须放在项目的WEB-INF/classes/META-INF/目录下。TomEE的内核OpenEJB扫描不到该配置文件时,会直接启动内置的HSQL内存数据库作为默认数据源。 - JPA实现与配置不匹配:TomEE WebProfile 9.0.0-M7默认集成的JPA实现是OpenJPA,你当前persistence.xml中配置的
hibernate.dialect、hibernate.show_sql等都是Hibernate专属参数,OpenJPA无法识别这些配置。如果要继续使用默认的OpenJPA,需要将这些Hibernate参数替换为OpenJPA对应的配置项;如果要使用Hibernate作为JPA实现,需要手动将Hibernate相关依赖包放入TomEE的lib目录,替换默认的JPA实现。 - 数据源JNDI引用路径错误:TomEE中自动注册的数据源JNDI路径带有固定前缀,从你贴的启动日志可以看到,容器识别到的资源路径为
openejb/Resource/jdbc/MySqlDS,你在persistence-unit中写的<jta-data-source>jdbc/MySqlDS</jta-data-source>是纯Tomcat环境的写法,OpenJPA匹配不到对应数据源时就会触发兜底逻辑。正确的引用值应为java:openejb/Resource/jdbc/MySqlDS。 - 数据源配置位置不符合TomEE规范:你将MySQL数据源配置在Tomcat原生的
context.xml中,TomEE的OpenEJB内核对该路径下的配置识别优先级极低,建议将数据源配置移到$CATALINA_HOME/conf/tomee.xml中,或者放到项目自身的WEB-INF/resources.xml里,才能被JPA容器正确识别。 - 冗余配置冲突:不要在persistence-unit中同时声明
<jta-data-source>和javax.persistence.jdbc.driver、javax.persistence.jdbc.url这类直连数据库的参数,避免容器优先走直连逻辑,忽略你配置的JNDI数据源。
内容的提问来源于stack exchange,提问作者g00se
相关产品推荐
相关产品推荐

