[SPRING] 봄 부팅 SSH Mysql?
SPRING봄 부팅 SSH Mysql?
워크 벤치를 통해 오픈 오피스 mysql에 성공적으로 연결할 수 있습니다. 스프링 부트 애플리케이션을 통해 어떻게 동일한 작업을 수행 할 수 있습니까?
내 application.properties :
# Connection url for the database
spring.datasource.url = jdbc:mysql://<SSH_username>:<SSH_password>@<mysql_hostname>:<mysql_port>/<mysql_schema>
# Username and password
spring.datasource.username = <mysql_username>
spring.datasource.password = <mysql_password>
내 개인 키는 어디에서 제공합니까?
해결법
-
==============================
1.SSH (예 : MySql-Openshift 사용)를 통해 로컬 응용 프로그램에서 Mysql 서버에 액세스하려면 "단"의 추가 작업으로 DataSource 객체가 이전에 SSH 연결을 설정해야합니다. 연결.
SSH (예 : MySql-Openshift 사용)를 통해 로컬 응용 프로그램에서 Mysql 서버에 액세스하려면 "단"의 추가 작업으로 DataSource 객체가 이전에 SSH 연결을 설정해야합니다. 연결.
평소와 다행스럽게도 그렇게 할 수있는 방법은 여러 가지가 있지만 가장 간단한 간단한 방법을 설명하려고합니다.
1) 클래스 경로에 Jcraft 라이브러리 추가 (SSH 연결 작업에 사용)
Maven을 pom.xml에 추가하면 다음 요소가 추가됩니다.
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> </dependency>
또는 http://www.jcraft.com/jsch/에서 다운로드하십시오.
2) SSH 서버에 연결할 클래스를 만듭니다 (여기에서는 이전 단계에서 가져온 라이브러리를 사용합니다)
예 :
import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class SSHConnection { private final static String S_PATH_FILE_PRIVATE_KEY = "C:\\Users\\Val\\.ssh\\privatekeyputy.ppk"; \\windows absolut path of our ssh private key locally saved private final static String S_PATH_FILE_KNOWN_HOSTS = "C:\\Users\\Val\\.ssh\\known_hosts"; private final static String S_PASS_PHRASE = "mypassphrase"; private final static int LOCAl_PORT = 3307; private final static int REMOTE_PORT = 3306; private final static int SSH_REMOTE_PORT = 22; private final static String SSH_USER = "87a34c7f89f5cf407100093c"; private final static String SSH_REMOTE_SERVER = "myapp-mydomain.rhcloud.com"; private final static String MYSQL_REMOTE_SERVER = "127.6.159.102"; private Session sesion; //represents each ssh session public void closeSSH () { sesion.disconnect(); } public SSHConnection () throws Throwable { JSch jsch = null; jsch = new JSch(); jsch.setKnownHosts(S_PATH_FILE_KNOWN_HOSTS); jsch.addIdentity(S_PATH_FILE_PRIVATE_KEY, S_PASS_PHRASE.getBytes()); sesion = jsch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT); sesion.connect(); //ssh connection established! //by security policy, you must connect through a fowarded port sesion.setPortForwardingL(LOCAl_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT); } }
이 클래스는 SSH 연결을 설정하기위한 모든 관련 정보를 유지합니다. 우리는 두 가지 메소드 만 정의했다는 것을 주목하십시오. 생성자는 클래스의 유일한 비 정적 필드로 표현되는 ssh 연결을 인스턴스화하기위한 생성자와, ssh 연결의 연결 해제 / 닫기를 얻는 다른 메소드를 정의합니다.
3) ServletContextListener 인터페이스 (2 단계에서 정의 된 클래스의 객체 보유)를 구현하는 리스너를 정의합니다.
앱이 시작될 때 ssh 연결을 만들려고 시도하고, 앱이 죽을 때 닫습니다.
@WebListener public class MyContextListener implements ServletContextListener { private SSHConnection conexionssh; public MyContextListener() { super(); } /** * @see ServletContextListener#contextInitialized(ServletContextEvent) */ public void contextInitialized(ServletContextEvent arg0) { System.out.println("Context initialized ... !"); try { conexionssh = new SSHConnection(); } catch (Throwable e) { e.printStackTrace(); // error connecting SSH server } } /** * @see ServletContextListener#contextDestroyed(ServletContextEvent) */ public void contextDestroyed(ServletContextEvent arg0) { System.out.println("Context destroyed ... !"); conexionssh.closeSSH(); // disconnect }
4) Spring을 사용하여 dispatcher-servlet.xml의 DataSource 객체를 평소와 같이 설정합니다. 그러나 포워드 포트를 가리 킵니다
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3307/yourSchema" /> <property name="username" value="admin4ajCbcWM" /> <property name="password" value="dxvfwEfbyaPL-z" /> </bean>
그리고 그게 전부입니다. 또 다른 가능성은 여러분 자신의 DataSource를 만들고, Spring에서 제공하는 것을 확장하고, ssh 기능을 추가하는 것입니다. 어쩌면 여기에 설명 된 솔루션이 더 잘 분리 된 것일 수 있습니다.
-
==============================
2.openshift에서는 MySQL 데이터베이스에 직접 연결합니다.
openshift에서는 MySQL 데이터베이스에 직접 연결합니다.
Openshift는 일련의 환경 변수를 제공합니다. 참조 : https://developers.openshift.com/en/managing-environment-variables.html#database-variables
연결에 사용해야합니다.
application.properties 내부에서 다음과 같은 환경 변수를 사용할 수 있습니다.
spring.xxx=${OPENSHIFT_MYSQL_DB_HOST:localhost}
여기서 OPENSHIFT_MYSQL_DB_HOST는 환경 변수 이름이고 localhost는 기본값입니다.
from https://stackoverflow.com/questions/33526427/spring-boot-ssh-mysql by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 웹 클라이언트를 멀티 스레드 환경에서 사용하는 올바른 방법 (0) | 2019.01.16 |
---|---|
[SPRING] @Autowired와 함께 @Transaction 주석 사용 - 봄 (0) | 2019.01.16 |
[SPRING] GWT 스프링 보안 통합 (PURE GWT, JSP 없음) (0) | 2019.01.16 |
[SPRING] 어떤 리턴 타입은 @RequestMapping 메소드의 spring mvc에서 사용합니까? (0) | 2019.01.16 |
[SPRING] Spring에서 @PropertyResource로 여러 속성 파일에 액세스하기 (0) | 2019.01.16 |