2017-02-21 5 views
0

У меня есть приложение Java, успешно работающее на Amazon Web Services Elastic Beanstalk.AWS RDS Как настроить базу данных MySQL

Я пытаюсь настроить MySQL. Я создал БД Instance, как вы можете увидеть:

enter image description here

enter image description here

Вопрос 1:

Как подключить Java приложения к базе данных?

У меня есть следующий код (после просмотра this):

@Bean 
    public DataSource dataSource() { 
     // Openshift 
//  String host = System.getenv("OPENSHIFT_MYSQL_DB_HOST"); 
//  String port = System.getenv("OPENSHIFT_MYSQL_DB_PORT"); 
//  String username = System.getenv("OPENSHIFT_MYSQL_DB_USERNAME"); 
//  String password = System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"); 

     // AWS 
     String host = System.getenv("RDS_HOSTNAME"); 
     String port = System.getenv("RDS_PORT"); 
     String username = System.getenv("RDS_USERNAME"); 
     String password = System.getenv("RDS_PASSWORD"); 
     String dbname = System.getenv("RDS_DB_NAME"); 

     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName")); 
     if (host == null) { 
      dataSource.setUrl(environment.getRequiredProperty("jdbc.url")); 
      dataSource.setUsername(environment.getRequiredProperty("jdbc.username")); 
      dataSource.setPassword(environment.getRequiredProperty("jdbc.password")); 
     } else { 
      //dataSource.setUrl("jdbc:mysql://" + host + ":" + port + "/"); 
      // Openshift 
      //dataSource.setUrl("jdbc:mysql://" + host + ":" + port + "/" + environment.getRequiredProperty("jdbc.dbname")); 
      // AWS 
      dataSource.setUrl("jdbc:mysql://" + host + ":" + port + "/" + dbname); 
      dataSource.setUsername(username); 
      dataSource.setPassword(password); 
      System.out.println("jdbc:mysql://" + host + ":" + port + "/" + dbname+", username: "+username+", password: "+password); 
     } 

     return dataSource; 
    } 

(пс закомментирована код работает на сервере OpenShifts)

Но я получаю следующее:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)

Вопрос 2:

Из существующей базы данных, в MySQL Workbench, я экспортировал sql-скрипты, чтобы создать схему и таблицы, а затем заполнить их. Как импортировать его в базу данных AWS RDS MySQL?

Подробнее:

Logs сервера:

------------------------------------- 
/var/log/tomcat8/localhost.2017-02-21.log 
------------------------------------- 
21-Feb-2017 14:42:51.133 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath 
21-Feb-2017 14:42:51.737 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring FrameworkServlet 'rest' 
21-Feb-2017 14:57:36.680 SEVERE [http-nio-8080-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [rest] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection] with root cause 
java.net.ConnectException: Connection refused (Connection refused) 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at java.net.Socket.connect(Socket.java:538) 
    at java.net.Socket.<init>(Socket.java:434) 
    at java.net.Socket.<init>(Socket.java:244) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:306) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2504) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344) 
    at java.sql.DriverManager.getConnection(DriverManager.java:664) 
    at java.sql.DriverManager.getConnection(DriverManager.java:208) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120) 
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 
    at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:99) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:129) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:247) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:254) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:203) 
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:56) 
    at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:67) 
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:380) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:427) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) 
    at com.sun.proxy.$Proxy55.findAll(Unknown Source) 
    at com.jobs.spring.controller.CategoryRESTService.findAllCategorys(CategoryRESTService.java:31) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

21-Feb-2017 15:09:21.090 INFO [localhost-startStop-2] org.apache.catalina.core.ApplicationContext.log Destroying Spring FrameworkServlet 'rest' 
21-Feb-2017 15:09:38.729 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath 
21-Feb-2017 15:09:39.329 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring FrameworkServlet 'rest' 

UPDATE

enter image description here

Я также добавил правила, чтобы открыть его для всех, но все-таки получить то же самое ошибка:

enter image description here

+0

см http://stackoverflow.com/questions/42384751/java-net-connectexception-connection-refused-connection-refused?noredirect=1#comment71918710_42384751 – Richard

ответ

0

Проблема связана с вашей базой данных и группой безопасности. Наведите указатель мыши на значок «i» рядом с конечной точкой кластера.

Всплывающее окно появится с группами безопасности. Нажмите первую ссылку по умолчанию, и вы будете перенаправлены на конфигурацию групп безопасности. Затем вам нужно отредактировать группу безопасности и добавить входящее правило, чтобы включить локальный ip.

Имейте в виду, что это будет работать только в том случае, если ваш rds находится в общедоступной подсети.

Эта ссылка довольно helpful для устранения неполадок.

Более подробная информация о security groups

+0

Спасибо, у меня будет взгляд. – Richard

+1

Спасибо. Но я вижу, что уже есть правило по умолчанию, которое имеет мой IP-адрес. У меня есть AWS Elastic Beanstalk, работающий с Tomcat, которому необходимо получить доступ к базе данных MySQL. Похоже, он уже настроен на использование этого IP-адреса. Я добавлю экранный снимок выше. – Richard

+0

см. Http://stackoverflow.com/questions/42384751/java-net-connectexception-connection-refused-connection-refused?noredirect1_comment71918710_42384751 – Richard

Смежные вопросы