0

У меня есть приложение Java (Spring + maven + hibernate), работающее на облаке Google с облачным SQL. Всякий раз, когда есть связь между базой данных и приложением, она бросает мне это исключение, говорящее, что не может открыть сбой связи. И в последнем он дает мне:Проблема с приложением весеннего спящего режима, работающим на GAE

Caused by: java.net.SocketException: Permission denied: Attempt to access a blocked recipient without permission. (mapped-IPv4) 
    at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:105) 
    at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:116) 
    at com.google.appengine.api.socket.SocketApiHelper.makeSyncCall(SocketApiHelper.java:82) 
    at com.google.appengine.api.socket.AppEngineSocketImpl.createSocket(AppEngineSocketImpl.java:497) 
    at com.google.appengine.api.socket.AppEngineSocketImpl.connectToAddress(AppEngineSocketImpl.java:362) 
    at com.google.appengine.api.socket.AppEngineSocketImpl.connect(AppEngineSocketImpl.java:352) 
    at java.net.Socket.connect(Socket.java:600) 
    at java.net.Socket.connect(Socket.java:537) 
    at java.net.Socket.<init>(Socket.java:434) 
    at java.net.Socket.<init>(Socket.java:250) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) 
    ... 113 more 

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Could not open connection 
    at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:440) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:334) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    at com.sun.proxy.$Proxy38.loadAdminLoginFromDetails(Unknown Source) 
    at com.bullbeardevice.service.impl.CustomAuthenticationManager.authenticate(CustomAuthenticationManager.java:47) 

Мой гибернации Файл конфигурации:

<!-- Hibernate Session Factory --> 
<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>classpath:database.properties</value> 
      </list> 
     </property> 
    </bean> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${db.driverClassName}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
    </bean> 

    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.abc.model" /> 
     <property name="hibernateProperties"> 
      <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
       <prop key="hibernate.jdbc.batch_size">100</prop> 
       <!-- <prop key="hibernate.hbm2ddl.auto">create-drop</prop> --> 
       <prop key="hibernate.current_session_context_class"> 
        org.springframework.orm.hibernate4.SpringSessionContext 
       </prop> 
       <!-- configuration pool via c3p0 --> 
       <prop key="hibernate.c3p0.acquire_increment">5</prop> 
       <prop key="hibernate.c3p0.idle_test_period">600</prop> 
       <prop key="hibernate.c3p0.max_size">25</prop> 
       <prop key="hibernate.c3p0.max_statements">25</prop> 
       <prop key="hibernate.c3p0.min_size">5</prop> 
       <prop key="hibernate.c3p0.timeout">300</prop> 
       <prop key="hibernate.connection.release_mode">auto</prop> 
       <prop key="hibernate.auto_close_session">true</prop> 
      </props> 
     </property> 
    </bean> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
    <tx:annotation-driven transaction-manager="transactionManager"/> 
    </beans> 

Мои database.properties:

#db.driverClassName=com.mysql.jdbc.Driver 
db.driverClassName=com.google.appengine.api.rdbms.AppEngineDriver 
#db.url=jdbc:mysql://192.168.1.3:3306/abc 
db.url=jdbc:google:rdbms://xxxx:xxxx/xxxx 
#db.url=jdbc:Oracle:thin:@127.0.0.1:1521/XE 
db.username=root 
db.password=root 
#hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 
hibernate.dialect=org.hibernate.dialect.MySQLDialect 
hibernate.show_sql=true 
hibernate.cache.use_second_level_cache=false 
hibernate.cache.use_query_cache=false 
#hibernate.cache.provider_class=net.sf.ehcache.hibernate.EhCacheProvider 
#hibernate.cache.provider_class==org.hibernate.cache.EhCacheProvider 
#db.sid=XE 
# configuration for hibernate search 
hibernate.search.default.locking_strategy=simple 
#hibernate.search.analyzer=org.apache.lucene.analysis.en.EnglishAnalyzer 
hibernate.search.worker.batch_size=100 
hibernate.search.indexing_strategy = manual 
hibernate.search.default.reader.strategy = shared 
hibernate.search.default.worker.thread_pool.size=30 
hibernate.search.default.indexwriter.ram_buffer_size=10 
hibernate.search.default.indexwriter.merge_max_optimize_size=7 
hibernate.search.default.indexwriter.merge_max_size=7 
+0

Пожалуйста, предлагайте мне бороться с этой проблемой за последние 2 дня. – Archit

+0

Вы подключаетесь к «App Engine», верно? Ваша строка подключения должна выглядеть так: 'jdbc: google: mysql: // ваш-project-id: ваш-instance-name/db-name? User = root', в соответствии с [docs] (https://developers.google.com/appengine/docs/java/cloud-sql/). Кроме того, по умолчанию вы должны использовать «root» пользователя без пароля, если вы не изменили пароль root @ localhost' вручную. Наконец, убедитесь, что ваше приложение «App Engine» включено в белый список в разделе «Контроль доступа» в Cloud Console. –

+0

Привет, юань, я уже изменил пароль root. а также разрешил моему приложению получить доступ к экземпляру sql sql. пользовательская строка подключения пользователя также не работает. Такая же ошибка дает. – Archit

ответ

0

При развертывании приложения будет проверять разрешение на доступ Cloud SQL (т. Е. Ваша авторизация для доступа к вашему облачному sql).

Когда авторизация происходит в первый раз, она будет хранить токены доступа OAUTH в вашем реестре Windows. Итак, со второго раза, он сразу же получает токен доступа из реестра.

Если этот токен изменен или истек, вы получите вышеуказанную ошибку. Поэтому вам нужно удалить старый токен и снова разрешить.

Чтобы удалить токены из реестра, выполните следующие действия.

Открытый прогон и тип regedit и нажмите кнопку «Открыть».

он откроет окно редактора реестра.

Затем разверните, HKEY_CURRENT_USER -> Программное обеспечение -> Javasoft -> Prefs -> ком -> Google -> Облако -> Sqlservice-> oauth2

Правая сторона вы сможете увидеть фишку клятва Google. Удалите жетоны, кроме значения по умолчанию.

Теперь, если вы развернете проект, он попросит вас разрешить. Он будет развернут.

Надеюсь, это вам поможет.

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