Я использую фреймворк Hibernate вместе с Maven в IntelliJ.Я создаю базу данных MySQL, у меня также есть несколько классов ORM, которые отображают базу данных MySQL, а затем я запускаю несколько тестов JUNIT, чтобы убедиться, что все работает.
У меня возникают проблемы в двух местах, которые связаны друг с другом:
- Когда я запускаю
mvn test
, иногда мои тесты JUNIT работают нормально и могутзапросить смоделированную базу данных, установить соединение (даже если оно только с имитированной базой данных), выполнить оператор и т. д. Однако иногда, если я запускаю mvn clean
до запуска mvn test
, в то время как тесты JUNIT все еще выполняются, тестывывод с ошибками (не с ошибками, а с ошибками, думал, что это все-таки плохо, конечно). - Проблема, описанная в # 1, по существу дублируется, когда я загружаю в GitHub и запускаю CircleCI (что неудивительно, поскольку CircleCI запускает
mvn test
при проведении интеграционного тестирования).Большинство моих загрузок не удалось, но одна из них, наконец, сработала.Однако я не совсем уверен, почему «последняя» загрузка была успешной, в то время как другие не были.
Сообщения об ошибках, которые я получаю либо от mvn test
, либо от сборок CircleCI, обычно следующие.Эти ошибки взяты из моей последней загрузки, той, которую я сделал незадолго до следующей загрузки, которая на самом деле работала:
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed
java.sql.SQLNonTransientConnectionException: Could not create connection to database server
Я также должен отметить, что я намерен запустить *Сначала 1021 *, затем загрузка в CircleCI, однако выполнение mvn clean
, похоже, как-то связано с увековечиванием этих ошибок.
Что касается различных ресурсов, которыми я пользуюсь, то вот они.Если я что-то забыл, пожалуйста, дайте мне знать, и я смогу включить это.
В моем файле hibernate.cfg.xml у меня есть следующие строки:
<property name="connection.url">jdbc:mysql://localhost:3306/stocks</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
В конце слова «акции» в первой строке я иногда добавляю любой изследующее (иногда я добавлял только одно из следующего, иногда я комбинировал их, в зависимости от ошибок, обнаруженных в Maven или CircleCI).Добавление некоторой комбинации этих строк, казалось, помогло заставить вещи работать, но запуск mvn clean
, казалось, остановил любой эффект, который имели эти добавления:
autoReconnect=true
useSSL=false
allowPublicKeyRetrieval=true
Запуск тестов JUNIT из IntelliJ обычно работает, но если я сначала запускаю mvn clean
, то IntelliJ обычно не будет работать, если я не вернусь в этот файл и не добавлю ?autoReconnect=true&useSSL=false
.Если я это сделаю, то IntelliJ прекрасно выполнит тесты JUNIT.
В моем файле config.yml для CircleCI у меня есть следующий код.В MAVEN_OPTS были добавлены некоторые утверждения, основанные на других исследованиях, которые я проводил, чтобы попытаться противодействовать ошибкам, которые я получал, но я не знаю, оказывают ли эти утверждения какое-либо влияние, так или иначе:
# Java Maven CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-java/ for more details
#
version: 2
jobs:
build:
docker:
# specify the version you desire here
- image: circleci/openjdk:8-jdk
# Specify service dependencies here if necessary
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
# - image: circleci/postgres:9.4
- image: circleci/mysql:latest-ram
environment:
- MYSQL_ROOT_PASSWORD: (my real password goes here)
- MYSQL_DATABASE: stocks
- MYSQL_USER: bob
- MYSQL_PASSWORD: (the real password goes here)
working_directory: ~/repo
environment:
# Customize the JVM maximum heap limit
MAVEN_OPTS: -Xmx3200m -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
steps:
- checkout
- run: sudo apt install -y mysql-client
# Download and cache dependencies
- restore_cache:
keys:
- v1-dependencies-{{ checksum "pom.xml" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: mvn dependency:go-offline
- save_cache:
paths:
- ~/.m2
key: v1-dependencies-{{ checksum "pom.xml" }}
# run tests!
- run: mvn integration-test
Если кто-нибудь знает, что происходит, я ценю помощь.Моя цель - иметь возможность загружать в CircleCI, сначала запустив mvn clean
, поэтому в загрузку включены только файлы src
, файл pom.xml
и папка .circleci
.Кроме того, не в пользу этого, но моя последняя загрузка в CircleCI действительно сработала, но я не уверен, что заставило эту сборку работать, в то время как все остальные не сделали.