我可以在 spring 应用程序上下文中从 jpa 获取 jdbc 数据源吗?

Posted

技术标签:

【中文标题】我可以在 spring 应用程序上下文中从 jpa 获取 jdbc 数据源吗?【英文标题】:can I get a jdbc datasource from jpa in spring application context? 【发布时间】:2012-02-12 06:27:12 【问题描述】:

如你所知,在 spring applicationContext 中,我们可以从 persistence.xml 定义 entityManagerFactory bean,就像:

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="MyUnit" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="false" />   
            <property name="database" value="mysql" />
        </bean>
    </property>
</bean>

现在如果我想初始化数据库如下:

<jdbc:initialize-database data-source="myDataSource" enabled="true">
   <jdbc:script location="classpath*:com/myapp/data*.sql"/>
</jdbc:initialize-database>

我应该为它配置另一个数据源bean吗?或者我可以参考上面定义的 emf,或者可以参考persistence.xml?

【问题讨论】:

@skaffman:来自 Spring 参考:12.9.1 Initializing a database instance using Spring XML “如果要初始化数据库并且可以提供对 DataSource bean 的引用,请使用初始化-spring-jdbc 命名空间中的数据源标签:" 【参考方案1】:
 <!-- use jndi lookup, or define it by your selfe -->
 <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myDataSource" />  

<bean
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="dataSource" ref="dataSource" />

    <!-- this is important to connect JPA and JdbcTemplate transaction control -->
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="false" />
        </bean>
    </property>
</bean>

<!-- jdbc templates that are equals for all databases -->
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
    <constructor-arg ref="dataSource" />
</bean>
<bean class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate" id="simpleJdbcTemplate">
    <constructor-arg ref="dataSource" />
</bean>

【讨论】:

以上是关于我可以在 spring 应用程序上下文中从 jpa 获取 jdbc 数据源吗?的主要内容,如果未能解决你的问题,请参考以下文章

用于在 Spring Data Jpa 中从多个表中获取数据的自定义查询

Tomcat 7 SEVERE:在 pom 中将 spring-data-jpa 添加到依赖项后,由于先前的错误,上下文 [] 启动失败

spring-data-jpa 如何使用多个数据源? [复制]

*** 错误设置多对多关系 Spring JPA

spring boot使用jpa的@Modify的clearAutomatically=true的作用

没有 Spring Boot 的 Spring Data JPA