我使用的飞行路线很长一段时间了。 非常漂亮的/完整的工具!
实际上,我面临着一个意想不到的情况......我有两个模式:
- 一个所有者pocessing的表和序列
- 使用同义词访问所有者对象的用户
自定义不希望我带来的“批创建任何同义词/降大任于同义词的权利给业主。 但我可以提供的“批创建同义词”给用户。
所以,我需要
- 创建表/序列(与业主连接)
- 格兰特选择,删除...到我的用户模式(与业主相连)
- 用于用户访问用户的对象创建一个同义词(与用户连接的)
点3是我的问题。
如果我给了“授予任何同义词”的所有者和使用飞路占位符,我可以做这样的事情:
CREATE OR REPLACE SYNONYM ${user}.WORKITEMINFO FOR WORKITEMINFO;
但是我不能 ;)
所以,我实现了解决方案是使用使用连接到用户模式的另一个数据源的Java迁移。 (我MigrationUtils.replacePlaceholders可以让我访问任何flyway.properties属性占位符)
private final static String[] queries =
{"CREATE OR REPLACE SYNONYM TASK_COMMENT FOR ${flyway.user}.TASK_COMMENT"}
@Override
public void migrate(final Connection connection) throws Exception {
final DataSource dataSource = MigrationUtils.getUserDataSource();
final Connection connectionForMigrations = dataSource.getConnection();
final JdbcTemplate jdbcTemplate = new JdbcTemplate(connectionForMigrations);
new TransactionTemplate(connectionForMigrations).execute(new TransactionCallback<Void>() {
@Override
public Void doInTransaction() {
try {
for (final String query : queries) {
final String replacedQuery = MigrationUtils.replacePlaceholders(query);
LOG.debug("Executing SQL: " + replacedQuery);
jdbcTemplate.executeStatement(replacedQuery);
}
} catch (final SQLException exc) {
throw new FlywayException("Could not drop synonym", exc);
}
return null;
}
});
}
还有另一种方法来解决这种情况呢?
谢谢!