Задача Ant проверить, существует ли база данных (соединение)? - PullRequest
3 голосов
/ 28 июля 2010

есть ли возможность в 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» не будут работать, так как задача, кажется, не выполняется.

Ответы [ 2 ]

1 голос
/ 05 февраля 2011

Вот обходной путь, который устанавливает свойство 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>
1 голос
/ 09 августа 2010

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

Описание выглядит следующим образом:

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

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

...