如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性

Posted

技术标签:

【中文标题】如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性【英文标题】:How to change Hibernate connection.url property from java code at application startup 【发布时间】:2014-05-28 15:37:03 【问题描述】:

hibernate.cfg.xml:

 <!-- Database connection settings -->
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:file:mycustomurl</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

我的应用程序有一个自定义安装文件夹,我想在其中找到我的 hsql 数据库。问题是我每次启动时都会在应用程序的主类中初始化位置。我该如何更改

<property name="connection.url">jdbc:hsqldb:file:mycustomurl</property>

mycustomurl 从我的主应用程序?所以我可以使用用户定义的应用程序目录?我还想从主类更改用户名/密码属性。我会在哪里每次启动时都从许可证文件生成密码。有没有办法做到这一点?我尝试了很多方法,发现不推荐使用的 bud 方法/教程。我使用最新版本的 hibernate/hsqldb。

我可以在硬盘的某处生成 hibernate.cfg.xml 然后(以某种方式)加载它吗?解决这个问题的最佳方法是什么?

【问题讨论】:

您是否尝试过以编程方式更改配置? (docs.jboss.org/hibernate/core/3.3/reference/en-US/html/…) 寻找ConfigurationConfiguration configuration = new Configuration().configure(); 然后configuration.setProperty("hibernate.connection.url",myUrl); @nachokk 我是否必须删除整个 cfg.xml 文件,或者它们可以与“配置”结合使用? 可以合并,有HibernateUtil吗? @nachokk 还没到那一步。我目前正在关注本教程icesoft.org/wiki/display/ICE/… 这让我很困惑,我必须找到答案,所以我希望它有效:) 我是休眠新手. 【参考方案1】:

在你的助手类中你可以放这样的东西

我从您提供的link 复制

public class HibernateUtil 

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() 
        try 
            Configuration configuration = new Configuration().configure()
                    .setProperty("hibernate.connection.url", "MY URL");
            ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()); 
            return configuration.buildSessionFactory(serviceRegistryBuilder
                    .buildServiceRegistry());

         catch (Throwable ex) 
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        
    

    public static SessionFactory getSessionFactory() 
        return sessionFactory;
    


【讨论】:

这是我在 bud ServiceRegistryBuilder 被弃用之前绑定的一种类似方式,这让我失望了。可以使用弃用的类吗? @TomasBisciak 你用的是什么休眠版本?我有 hibernate4 并且没有被弃用 4.3.5 最终版 @TomasBisciak 我有 4.2.6 并且在那里没有被弃用,可能我不知道还有其他更好的创建方法:D 我决定不用休眠 .. 并创建我自己的类似框架的做事方式:) 无论如何谢谢帮助

以上是关于如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性的主要内容,如果未能解决你的问题,请参考以下文章

允许程序特权在启动时从任何帐户更改 PC 名称?

首先是EF6代码:如何在启动时从EDMX文件加载DbCompiledModel?

如何在 Java 中保存数据?酒店申请

手机日期更改时从 sharedpreference 中删除保存的数据

如何在android中启动活动时从sqlite数据库中删除所有行(数据)

请教在Spring MVC中,如何实现启动时从数据库读取信息