Java JPA是否要求数据源来自JNDI?

Java JPA是否要求数据源来自JNDI?,java,spring,tomcat,jpa,jndi,Java,Spring,Tomcat,Jpa,Jndi,我正在使用Tomcat中的Spring作为我的Web应用程序。我的数据源是在Spring中构建的,然后使用org.springframework.JNDI.jndemplate发布到JNDI。这有几个原因,但我的主要问题是很难控制正在使用的数据库(我想进行测试)。是否可以使用JPA而不使用JNDI作为查找服务?理想情况下,我可以直接向JPA提供数据源,或者通过其他一些不依赖容器实现的方法(我已经研究了容器不提供的JNDI实现,但它们不适合我的需要)。您可以在spring配置文件中指定数据源。下面

我正在使用Tomcat中的Spring作为我的Web应用程序。我的数据源是在Spring中构建的,然后使用org.springframework.JNDI.jndemplate发布到JNDI。这有几个原因,但我的主要问题是很难控制正在使用的数据库(我想进行测试)。是否可以使用JPA而不使用JNDI作为查找服务?理想情况下,我可以直接向JPA提供数据源,或者通过其他一些不依赖容器实现的方法(我已经研究了容器不提供的JNDI实现,但它们不适合我的需要)。

您可以在spring配置文件中指定数据源。下面是我的一个摘录,它使用了一个MySql数据库。要查看完整的配置文件和项目,请在上查看源代码


我还鼓励您访问我的博客,其中包含一段视频,介绍如何设置数据源:


Spring文档还包括如何设置不依赖JNDI的数据源的示例:

您可以直接在persistence.xml中为任何给定持久性单元定义数据源连接:


org.hibernate.ejb.HibernatePersistence

如果你没有使用Hibernate,你可以查找你的提供者属性,或者使用JPA2标准属性
javax.persistence.jdbc.user
javax.persistence.jdbc.password
javax.persistence.jdbc.url
等等。

你使用什么类型的数据库?在生产中,我使用的是MySql。在测试中,我使用的是一个仅在内存中的H2实例(因此它总是以干净的方式开始)。我正在使用Hibernate作为我的提供者。谢谢你的建议。有没有办法为这些属性设置动态值?在测试中,我使用的连接参数与在生产中不同。根据LocalContainerEntityManagerFactoryBean的javadoc,实体管理器仍在读取persistence.xml配置。这正是我想要的。非常感谢。
<!-- Database -->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/to_thought_tutorial" />
    <property name="username" value="tutorial" />
    <property name="password" value="tutorial" />
</bean>

<!-- Entity Manager -->
<bean id="entityManagerFactory"
   class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
       <property name="dataSource" ref="datasource" />
       <property name="persistenceUnitName" value="tothought-tutorial" />
</bean>