Unitils and DBMaintainer - how to make them work with multiple users/schemas?

后端 未结 4 1330
花落未央
花落未央 2020-12-20 04:25

I am working on a new Oracle ADF project, that is using Oragle 10g Database, and I am using Unitils and DBMaintainer in our project for:

  • updating the db struct
相关标签:
4条回答
  • 2020-12-20 04:51

    Check out this link: http://www.dbmaintain.org/tutorial.html#From_Java_code

    Specifically you may need to do something like:

    databases.names=admin,user,read
    database.driverClassName=oracle.jdbc.driver.OracleDriver
    database.url=jdbc:oracle:thin://mydb:1521:MYDB
    database.admin.username=admin
    database.admin.password=adminpwd
    database.admin.schemaNames=admin
    database.user.userName=user
    database.user.password=userpwd
    database.user.schemaNames=user
    database.read.userName=read
    database.read.password=readpwd
    database.read.schemaNames=read
    

    Also this link may be helpful: http://www.dbmaintain.org/tutorial.html#Multi-database__user_support

    0 讨论(0)
  • 2020-12-20 04:54

    I followed Ryan suggestion. I noticed couple changes when I debugged UnitilsDB.

    Following is my running unitils-local.properties:

    database.names=db1,db2
    database.driverClassName.db1=oracle.jdbc.driver.OracleDriver
    database.url.db1=jdbc:oracle:thin:@db1d.company.com:123:db1d
    database.userName.db1=user
    database.password.db1=password
    database.dialect.db1=oracle
    database.schemaNames.db1=user_admin
    
    database.driverClassName.db2=oracle.jdbc.driver.OracleDriver
    database.url.db2=jdbc:oracle:thin:@db2s.company.com:456:db2s
    database.userName.db2=user
    database.password.db2=password
    database.dialect.db2=oracle
    

    Make sure to use @ConfigurationProperties(prefix = "database.db1") to connecto to particular database in your test case:

    @RunWith(UnitilsJUnit4TestClassRunner.class)
    @ConfigurationProperties(prefix = "database.db1")
    @Transactional
    @DataSet
    public class MyDAOTest {
    
    ..
    
    }
    
    0 讨论(0)
  • 2020-12-20 05:01

    eventually I found a way to inject any unitil.properties of your choice --- by instantiating Unitils yourself!

    You need a method that is evoked @BeforeClass, in which you perform something like the following:

    @BeforeClass
    public void initializeUnitils {
        Properties properties;
        ...
        // load properties file/values depending on various conditions
        ...
        Unitils unitils = new Unitils();
        unitils.init(properties);
        Unitils.setInstance( unitils );     
    }
    

    I choose the properties file depending on which hibernate configuration is loaded (via @HibernateSessionFactory), but there should be other options as well

    0 讨论(0)
  • 2020-12-20 05:06

    I have figure out how to make dbmaintain and unitils work together on multi-database-user support, but the solution is a pure ant hack.

    1. I have set up the configuration for dbmaintain, using multi-database-user support.
    2. I have made a unitils-local.properties file with token keys for replacement.
    3. The init target of my ant script is generating a new unitils-local.properties file, by replacing tokens for username/password/schema with values that are correct for the target envirnonment, and then copies it to the users home directory.
    4. I have sorted the tests into folders, that are prefixed with the schema name
    5. When unitils is invoked, it picks up the unitils-local.properties file just created by the ant script, and does its magic.

    Its far from pretty, but it works.

    0 讨论(0)
提交回复
热议问题