Мучаюсь уже две недели...
На ноутбуке все работает локально - проект запускается. Как только создаю .war для tomcat, чтобы развернуть его на удаленном сервере, на сервере получаю исключение.
localhost.2024-02-11.log
11-Feb-2024 12:53:49.771 SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.jdbc.datasource.init.DataSourceInitializer#0': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
catalina.2024-02-11.log
11-Feb-2024 12:53:27.715 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
11-Feb-2024 12:53:38.232 SEVERE [main] org.apache.tomcat.jdbc.pool.ConnectionPool.init Unable to create initial connections of pool.
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
На удаленном сервере:
1. ubuntu 20.04 LTS, была установлена 22.04, все та же ошибка.
2. установлен openjdk-17.0.9 (так как делал на ноутбуке). Протестировал его отдельно, чтобы запустить .jar на spring-boot, все запускается на удаленном сервере.
3. Установил mysql 8.0.36, до этого была 5.7.42, разницы нет, все равно не работает. Сама база работает. Могу добавлять пользователей, создавать таблицы и так далее, но не могу подружиться с tomcat.
4. Установил mysql-connector-java_8.0.31 отдельно, он добавлен в зависимостях pom.xml (сначала пробовал без него, думал, что он автоматически подтягивается через pom.xml зависимости, но с ним тоже не работает)
5. Установлен Tomcat 9.0.59 (так делал на ноутбуке). Контейнер сервлета запускается, работает, но не подключается к mysql.
pom.xml
<dependencies>
<!--DataBase-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>${javax-el.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
<!--Web-->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data-jpa.version}</version>
</dependency>
</project>
application.properties
database.url=jdbc:mysql://localhost:3306/topdom?autoReconnect=true&serverTimezone=Europe/Moscow
database.username=root
database.password=root
spring.jpa.hibernate.ddl-auto=create
#spring.jpa.show-sql: false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
database.init=true
jpa.showSql=true
jdbc.initLocation=classpath:db/initDB.sql
hibernate.format_sql=true
hibernate.use_sql_comments=true
tomcat.properties
database.init=false
jdbc.initLocation=initDB.sql
jpa.showSql=true
hibernate.format_sql=true
hibernate.use_sql_comments=true
context.xml
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resource name="jdbc/application"
auth="Container"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/topdom"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
validationQuery="SELECT 1"
maxTotal="10"
minIdle="2"
maxWaitMillis="20000"
initialSize="2"
maxIdle="5"
testOnBorrow="true"
removeAbandonedOnBorrow="true"
testWhileIdle="true"/>
</Context>
spring-db.xml
<jdbc:initialize-database data-source="dataSource" enabled="${database.init}">
<jdbc:script encoding="utf-8" location="${jdbc.initLocation}"/>
<jdbc:script encoding="utf-8" location="classpath:db/populateDB.sql"/>
</jdbc:initialize-database>
<tx:annotation-driven/>
<beans>
<context:property-placeholder location="classpath:db/application.properties" system-properties-mode="OVERRIDE"/>
<bean id="dataSource"
class="org.apache.tomcat.jdbc.pool.DataSource"
p:driverClassName="${spring.datasource.driver-class-name}"
p:url="${database.url}"
p:username="${database.username}"
p:password="${database.password}"/>
</beans>
<beans profile="tomcat">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/application"/>
<context:property-placeholder location="classpath:db/tomcat.properties" system-properties-mode="OVERRIDE"/>
</beans>
<!-- EntityManagerFactory -->
<beans>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"
p:packagesToScan="com.example.**.model">
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<entry key="#{T(org.hibernate.cfg.AvailableSettings).FORMAT_SQL}" value="${hibernate.format_sql}"/>
<entry key="#{T(org.hibernate.cfg.AvailableSettings).USE_SQL_COMMENTS}" value="${hibernate.use_sql_comments}"/>
<entry key="#{T(org.hibernate.cfg.AvailableSettings).JPA_PROXY_COMPLIANCE}" value="false"/>
</map>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:showSql="${jpa.showSql}"/>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
</beans>
<beans>
<context:component-scan base-package="com.example.**.repository.datajpa"/>
<jpa:repositories base-package="com.example.**.repository.datajpa"/>
</beans>
</beans>