Как прочитать настройки значений свойств для ActiveJDBC? - PullRequest
0 голосов
/ 11 июня 2018

Я использую файл activejdbc.properties, чтобы указать расположение моих значений database.properties.

activejdbc.properties

env.connections.file=/opt/apps/conf/database.properties

база данных.properties (находится на сервере)

development.driver=oracle.jdbc.OracleDriver
development.username=myusername
development.password=mypassword
development.url=jdbc:oracle:thin:@//dburl:1521/testdb.world

Сейчас я пытаюсь использовать пул соединений.Я рассмотрел ваш пример, как это сделать, однако я не совсем понимаю, как получить значения свойств моей базы данных, чтобы помочь создать пул соединений.

Вот ваш пример:

public void shouldUseConnectionFromPool() throws PropertyVetoException, SQLException, ClassNotFoundException {
        Class.forName(driver());
        DataSource dataSourceUnpooled = DataSources.unpooledDataSource(url(), user(), password());
        DataSource dataSourcePooled = DataSources.pooledDataSource(dataSourceUnpooled); //init the connection pool
        Base.open(dataSourcePooled); //get connection from pool
        Person.deleteAll(); //clean DB before test
        Person.createIt("name", "Matt", "last_name", "Diamont", "dob", "1962-01-01");
        a(Person.findAll().size()).shouldBeEqual(1);

        Person.deleteAll();//clean DB after test
        Base.close();// really connection goes back to pool
        DataSources.destroy(dataSourcePooled);//shut down the pool
    }

А вот и мой.Я использую JavaSpark и пытаюсь определить свой пул в main (), когда сервер запускается.

public static void main(String[] clargs) {

        try {
            DataSource dataSourceUnpooled = DataSources.unpooledDataSource("jdbc:oracle:thin:@//dburl:1521/testdb.world", "myusername", "mypassword");
            dataSourcePooled = DataSources.pooledDataSource(dataSourceUnpooled); //init the connection pool
        } catch (SQLException e1) {
            e1.printStackTrace();
        }

        before("/*", (req, res) -> {

            if (!Base.hasConnection()) {
                System.out.println("Database Connection OPEN.");
                Base.open(dataSourcePooled); //get connection from pool  ;
            }
         }

         after("/*", (req, res) -> {    
            Base.close(); // really connection goes back to pool
        });

        get("/exit", (req,res)->{
            if (Base.hasConnection()) {
                Base.close(); // really connection goes back to pool
            }
            DataSources.destroy(dataSourcePooled); //shut down the pool

            System.exit(0);
            return "Application shutdown";
        });
}

Итак, теперь я пытаюсь удалить жестко закодированные значения свойств и использовать то, что установлено в моих файлах.Я вижу, что вы используете url () и т. Д., Но не уверены, что это частный метод, который вы создали для своих тестов.Итак, мой вопрос: есть ли простой способ использовать URL, ИМЯ ПОЛЬЗОВАТЕЛЯ, ПАРОЛЬ и т. Д. Из того, что извлечено ActiveJDBC, или мне нужно просто прочитать файл на сервере и вручную извлечь его?

1 Ответ

0 голосов
/ 13 июня 2018

Вот что вам нужно сделать

-> Удалить файл activejdbc.properties.

-> Поскольку Spark использует Jetty, используйте Jetty для настройки пула JDBC: https://wiki.eclipse.org/Jetty/Howto/Configure_JNDI_Datasource

-> Создать файл свойств /opt/apps/conf/database.properties с таким содержимым:

development.jndi=java:comp/env/jdbc/acme

-> Перепишите вашу программу:

public static void main(String[] clargs) {
    before("/*", (req, res) -> {
       Base.open(); //will pickup 'development' connection from property file 
    });
    after("/*", (req, res) -> {
        Base.close(); // really connection goes back to pool
    });
    get("/exit", (req, res) -> {
        System.exit(0);
        return "Application shutdown";
    });
}

Я думаю, вам нужно добавить больше методов, чтобы выполнить любую работу.

Запустите программу:

java com.company.project.Main -cp myprogram.jar -Denv.connections.file=/opt/apps/conf/database.properties

Подробнее: http://javalite.io/database_connection_management#location-of-property-file

...