我正在开发一个新的Oracle ADF项目,即使用Oragle 10g数据库,我在我们的项目中使用Unitils和DBMaintainer:
在我们的项目中,我们有2个模式,以及2个具有连接到这些模式的特权的数据库用户。我将它们放在具有增量名称的文件夹结构中,我使用@convention进行脚本命名。
001_@schemaA_name.sql
002_@schemaB_name.sql
003_@schemaA_name.sql
这适用于ant和DBMaintainer更新任务,我通过为ant任务配置额外元素来提供多个用户名。
<target name="create" depends="users-drop, users-create" description="This tasks ... ">
<updateDatabase scriptLocations="${dbscript.maintainer.dir}" autoCreateDbMaintainScriptsTable="true">
<database name="${db.user.dans}" driverClassName="${driver}" userName="${db.user.dans}" password="${db.user.dans.pwd}" url="${db.url.full}" schemaNames="${db.user.dans}" />
<database name="idp" driverClassName="${driver}" userName="${db.user.idp}"
password="${db.user.idp.pwd}" url="${db.url.full}" schemaNames="${db.user.idp}" />
</updateDatabase>
</target>
但是,我无法弄清楚,如何使DBMaintainer更新任务从我的数据库模式创建xsd模式?
所以,我决定使用Unitils,因为它的更新创建了xsd模式。 我没有找到Unitils蚂蚁任务的任何描述或文档 - 任何人都可以提供一些提示吗? 目前我已经想通过使用@Dataset注释创建一个Junit测试来运行Unitils。我可以使用一个模式和一个db用户。但我不知道如何让它与多个用户一起工作?
这是我的unitils-local.properties设置:
database.url=jdbc\:oracle\:thin\:@localhost\:1521\:vipu
database.schemaNames=a,b
database.userName=a
database.password=a1
你们中的任何人都可以给我一个提示,如何让Unitils与第二个用户/架构一起工作? 我将非常感谢你的帮助!
答案 0 :(得分:3)
最终我找到了一种方法来注入你选择的任何unitil.properties ---通过自己实例化Unitils!
你需要一个诱发@BeforeClass的方法,你可以在其中执行以下操作:
@BeforeClass
public void initializeUnitils {
Properties properties;
...
// load properties file/values depending on various conditions
...
Unitils unitils = new Unitils();
unitils.init(properties);
Unitils.setInstance( unitils );
}
我根据加载的hibernate配置选择属性文件(通过@HibernateSessionFactory),但是还应该有其他选项
答案 1 :(得分:1)
我已经弄清楚如何让dbmaintain和unitils在多数据库用户支持上协同工作,但解决方案是一个纯粹的蚂蚁黑客。
它远非漂亮,但它确实有效。
答案 2 :(得分:0)
点击此链接:http://www.dbmaintain.org/tutorial.html#From_Java_code
具体而言,您可能需要执行以下操作:
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
此链接也可能有所帮助:http://www.dbmaintain.org/tutorial.html#Multi-database__user_support
答案 3 :(得分:0)
我跟着瑞安的建议。我在调试UnitilsDB时注意到了一些变化。
以下是我运行的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
确保使用@ConfigurationProperties(prefix =&#34; database.db1&#34;)连接到测试用例中的特定数据库:
@RunWith(UnitilsJUnit4TestClassRunner.class)
@ConfigurationProperties(prefix = "database.db1")
@Transactional
@DataSet
public class MyDAOTest {
..
}