【问题标题】:How do I load database credentials from a properties file in JPA?如何从 JPA 中的属性文件加载数据库凭据?
【发布时间】:2011-07-07 20:33:09
【问题描述】:

所以我有一个连接到 MySQL 数据库的 Java/JPA2.0 (EclipseLink) 应用程序。我的意图只是传递一个带有db.properties 文件的JAR 文件。 db.properties 应包含服务器主机地址、用户名、密码等,以便最终用户只需将其插入并开始在其项目中使用 JAR。

目前,我只是使用 Netbeans 创建了一个带有凭据的 persistence.xml 文件,并且可以正常工作。但是如何实现属性文件呢?

我的 EntityManager 类:

public class Factories {

    private static final EntityManagerFactory entityManagerFactory = buildEntityManagerFactory();

        private static EntityManagerFactory buildEntityManagerFactory() {
            try {
                return Persistence.createEntityManagerFactory("MyPU");
            } catch (Exception ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static EntityManager getEntityManager() {
        return entityManagerFactory.createEntityManager();
    }
}

谢谢

【问题讨论】:

    标签: java properties persistence jpa-2.0


    【解决方案1】:

    您可以使用createEntityManagerFactory() 方法的两参数版本。第二个参数(映射)可用于将包括凭据在内的属性传递给数据库。因此,您可以传入带有键 javax.persistence.jdbc.userjavax.persistence.jdbc.password 以及适当值的映射。

    example in the EclipseLink wiki 演示了如何实现这一点,尽管它使用 EclipseLink 提供的类来实现这一点:

    import static org.eclipse.persistence.config.PersistenceUnitProperties.*;
    
        ...
    
        Map properties = new HashMap();
    
        // Ensure RESOURCE_LOCAL transactions is used.
        properties.put(TRANSACTION_TYPE,
            PersistenceUnitTransactionType.RESOURCE_LOCAL.name());
    
        // Configure the internal EclipseLink connection pool
        properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
        properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
        properties.put(JDBC_USER, "scott");
        properties.put(JDBC_PASSWORD, "tiger");
    
        // Configure logging. FINE ensures all SQL is shown
        properties.put(LOGGING_LEVEL, "FINE");
        properties.put(LOGGING_TIMESTAMP, "false");
        properties.put(LOGGING_THREAD, "false");
        properties.put(LOGGING_SESSION, "false");
    
        // Ensure that no server-platform is configured
        properties.put(TARGET_SERVER, TargetServer.None);
    
        // Now the EntityManagerFactory can be instantiated for testing using: 
        Persistence.createEntityManagerFactory(unitName, properties);
    

    请注意,也可以通过接受属性的EntityManagerFactory.createEntityManager() 方法来执行此操作。但是,如果您仔细阅读EclipseLink auditing example,您会注意到还创建了一个共享连接池(其属性来自persistence.xml),并且实际使用的连接取决于您是在执行读取还是写入.

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 2018-07-21
      • 2020-04-14
      • 1970-01-01
      • 2014-07-29
      • 2016-03-11
      • 2019-05-14
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多