2010-07-28 3 views
3

есть возможность в ANT проверить, существует ли база данных (соединение), без сбоя сборки?Задача 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 

потому что дб еще не существует. Установка «onerror» на «continue» и проверка «errorproperty» не будет работать, поскольку задача, похоже, не выполняется.

ответ

1

Начиная с Ant v 1.8.0 вы можете использовать атрибут failOnConnectionError с помощью SQL-задачи.

Описание гласит:

Если ложь, будет печатать только предупреждающее сообщение и не выполняет какое-либо заявление, если задача не может подключиться к базе данных.

Похоже, что это решит вашу проблему.

+0

Я использую, что именно для этой цели, но по каким-то причинам errorproperty никогда не устанавливается - это означает, что нет способа узнать, удалось ли соединение или нет (с помощью обходного пути) – Rhubarb

1

Вот обходной путь, который устанавливает db.present свойства (checkpresence.sql простого оператор выбора)

<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> 
Смежные вопросы