Externalize credentials from persistence.xml in J2SE app

浪子不回头ぞ 提交于 2019-12-18 17:29:44

问题


I'm writing a J2SE app (no enterprise container) that uses JPA for persistence. Here is my persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="dbstats">

    <!-- TODO: why is this needed? -->
    <class>dreambear.stats.data.GamePlayedEvent</class>
    <class>dreambear.stats.data.HyveMemberCountPoll</class>
    <class>dreambear.stats.data.ProfileCountPoll</class>
    <class>dreambear.stats.data.UserSession</class>
    <class>dreambear.stats.data.UsersOnlinePoll</class>

    <properties>

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.max_fetch_depth" value="3" />
        <property name="hibernate.hbm2ddl.auto" value="update" />

        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />

        <!-- TODO: externalize information -->
        <property name="javax.persistence.jdbc.user" value="dbstats" />
        <property name="javax.persistence.jdbc.password" value="*****" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://example.com/dbstats" />

    </properties>

    </persistence-unit>

</persistence>

It's a static file, "compiled" into the application. However, I need to extract the credentials so I can load them from config parameters at runtime, because they're different for e.g. the development and live version of the app.

I load the persistence setup in the default way:

emf = Persistence.createEntityManagerFactory("dbstats");

How can I externalize the credentials in this setup? I could generate the persistence.xml file at runtime, but that's a bit hacky.


回答1:


You can provide additional properties when creating EntityManagerFactory:

Map<String, String> properties = new HashMap<String, String>();
properties.put("javax.persistence.jdbc.user", ...);
...

emf = Persistence.createEntityManagerFactory("dbstats", properties); 


来源:https://stackoverflow.com/questions/4548353/externalize-credentials-from-persistence-xml-in-j2se-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!