Spring-boot + tomcat + ssh = сбой соединения

Я пытаюсь развернуть приложение с весенней загрузкой на Кот (я пробовал версии 7.0.85 и 8.5.29) .
Мы создаем ssh-туннель для подключения к удаленной базе данных, как здесь: Spring Boot SSH Mysql? (contextListener, создание ssh-соединения) .
Все работает отлично, когда tomcat встроен, но когда я пытаюсь развернуть, я получаю сбой соединения.
Вот мой основной класс приложения:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    private static final Logger LOGGER = Logger.getLogger(Application.class.getName());

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
         return application.sources(Application.class);
    }


    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public ContextListener getListener() {
        return new ContextListener();
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.addListener(getListener());
        super.onStartup(servletContext);
    }

 }

И фрагменты pom.xml:

...   
<packaging>war</packaging>

<properties>
    <main.basedir>${project.parent.basedir}</main.basedir>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <version>1.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.54</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180130</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    ...
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
    </plugins>
</build>  

application.properties:

server.contextPath=/app
spring.datasource.url=jdbc:mysql://localhost:3307/db
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl  

И ошибка следующая:

2018-03-25 00:41:29.507 ERROR 19924 --- [ost-startStop-1] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.  

Я читал много руководств по развертыванию войны с приложением spring -boot в tomcat (например, https://www.mkyong.com/spring-boot/spring-boot-deploy-war-file-to-tomcat/). Я все сделал, но все равно получаю эту ошибку.

Я пробовал много-много решений, ничего не помогает, вот мои шаги:

I. Добавление различных свойств, например:

spring.datasource.tomcat.initialSize=5
spring.datasource.tomcat.maxActive=55
spring.datasource.tomcat.maxIdle=21
spring.datasource.tomcat.minIdle=13
spring.datasource.tomcat.testWhileIdle=true
spring.datasource.tomcat.timeBetweenEvictionRunsMillis=34000
spring.datasource.tomcat.minEvictableIdleTimeMillis=55000
spring.datasource.tomcat.validationInterval=34000
spring.datasource.tomcat.testOnBorrow=true
spring.datasource.tomcat.validationQuery=SELECT 1
spring.datasource.tomcat.removeAbandoned=true
spring.datasource.tomcat.removeAbandonedTimeout=233  

II. Использование Tomcat JDBC, как здесь, и настройка пула соединений: Невозможно установить spring.datasource.type

III. Проверяю все, указал в ответе на этот пост: Устранение «сбоя канала связи» с помощью JDBC и MySQL

IV. Изменение catalina.policy для добавления грантов, как здесь: доступ запрещен при попытке подключиться к mysql с использованием источника данных tomcat

В настоящее время я восстановил все изменения в моем server.xml, и он выглядит так:

<Server port = "8005" shutdown = "SHUTDOWN">
  <Listener className = "org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className = "org.apache.catalina.core.AprLifecycleListener" SSLEngine = "on" />
  <Listener className = "org.apache.catalina.core.JasperListener" />
  <Listener className = "org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className = "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className = "org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
      <Resource name = "UserDatabase" auth = "Container"
          type = "org.apache.catalina.UserDatabase"
          description = "User database that can be updated and saved"
          factory = "org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname = "conf/tomcat-users.xml" />
   </GlobalNamingResources>
   <Service name = "Catalina">
      <Executor name = "tomcatThreadPool" namePrefix = "catalina-exec maxThreads = "150" minSpareThreads = "4"/>
      <Connector port = "8080" protocol = "HTTP/1.1"
           connectionTimeout = "20000"
           redirectPort = "8443" />
      <Connector port = "8009" protocol = "AJP/1.3" redirectPort = "8443" />
      <Engine name = "Catalina" defaultHost = "localhost">
         <Realm className = "org.apache.catalina.realm.LockOutRealm">
         <Realm className = "org.apache.catalina.realm.UserDatabaseRealm"
           resourceName = "UserDatabase"/>
         </Realm>
         <Host name = "localhost"  appBase = "webapps" unpackWARs = "true" autoDeploy = "true">
            <Valve className = "org.apache.catalina.valves.AccessLogValve" directory = "logs"
           prefix = "localhost_access_log." suffix = ".txt"
           pattern = "%h %l %u %t &quot;%r&quot; %s %b" />
         </Host>
      </Engine>
 </Service>

Я искал информацию, как правильно установить ssh-соединение в этом xml, но не нашел ничего, что могло бы мне помочь.

Что я делаю неправильно? Я что-то пропустил? Есть ли полное руководство по развертыванию войны на tomcat с базой данных (или ssh)?

Готов поспорить, вам нужно настроить там SSH-коннектор. Можете ли вы добавить свой $ CATALINA_BASE / conf / server.xml

AlexGera 25.03.2018 01:51

Обновился, как я уже писал, понятия не имею, как правильно это настроить :(

banabella 25.03.2018 19:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
661
0

Другие вопросы по теме