是否有可能在ANT中检查数据库(连接)是否存在而不会使构建失败?
例如:
<target name="check-database-available">
<sql
classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@${my.db.host}:${my.db.port}:${my.db.sid}"
userid="${my.db.user}"
password="${my.db.pw}"
onerror="continue" errorproperty="exit.status">
select * from dual;
</sql>
<echo message="### exit status = ${exit.status}" />
</target>
这将始终因BUILD FAILED和
而失败java.sql.SQLException: ORA-01017: invalid username/password; logon denied
因为db还不存在。将“onerror”设置为“continue”并检查“errorproperty”将不起作用,因为任务似乎没有被执行。
答案 0 :(得分:1)
从Ant v 1.8.0开始,您可以将failOnConnectionError
属性与SQL任务一起使用。
描述如下:
如果为false,则只会打印警告消息,如果任务无法连接到数据库,则不执行任何语句。
看起来它会解决你的问题。
答案 1 :(得分:1)
这是一个设置db.present属性的解决方法(checkpresence.sql是一个简单的select语句)
<target name="check-db-presence">
<echo message="Checking database presence at: ${db.url}"/>
<delete file="tmp/db.present"/>
<sql driver="${db.driver}" url="${db.url}"
userid="${db.userName}" password="${db.password}"
failOnConnectionError="false" onerror="continue" warningproperty="db.empty" errorproperty="db.empty"
src="scripts/${db.platform}/checkpresence.sql"
print="true" output="tmp/db.present"/>
<condition property="db.present">
<available file="tmp/db.present"/>
</condition>
</target>