Подключение приложения Google App Engine к стороннему облаку - PullRequest
0 голосов
/ 05 февраля 2020

Согласно этой ссылке я должен иметь возможность подключить свое веб-приложение Google App Engine к внешней базе данных (в данном случае, в частности, я хочу подключить его к heroku ClearCB- mysql).

"Other cloud providers
App Engine apps can connect to external databases that are hosted on other public clouds as
long as those database servers and your firewall are configured properly to accept
connections. Your App Engine app connects over the Internet using that external 
service's public IP address."

Может кто-нибудь указать мне на правильную конфигурацию серверов и брандмауэра? Я не могу найти какую-либо документацию по нему, и у меня даже нет понятия, с чего начать (мне нужно объяснение для чайников o_O);).

Я подключаюсь к БД через spring-jpa, которая работает на localhost просто отлично, просто когда я загружаю свое поле в Google App Engine, время ожидания истекает.


ApplicationConfig. java

@Configuration
@EnableJpaRepositories(basePackages = "dominikazb")
@EnableTransactionManagement
@ComponentScan(basePackages = "dominikazb")
public class ApplicationConfig extends WebMvcConfigurationSupport {

@Bean
public InternalResourceViewResolver jspViewResolver(){
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/jsp/");
    viewResolver.setSuffix(".jsp");
    viewResolver.setViewClass(JstlView.class);
    return viewResolver;
}


@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em
            = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan(new String[] { "dominikazb" });

    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    em.setJpaProperties(additionalProperties());
    return em;
}

@Bean
public DataSource dataSource(){
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://hostname/databasename");
    dataSource.setUsername( "username" );
    dataSource.setPassword( "password" );
    return dataSource;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
    return new PersistenceExceptionTranslationPostProcessor();
}

Properties additionalProperties() {
    Properties properties = new Properties();
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    return properties;
}
}

UserRepository. java

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
}

Пользователь. java

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int user_id;
private String username;
private String password;

//getters, setters and constructor

}

HomeController. java

@Controller
public class HomeController {

@Autowired
private UserRepository userRepository;

@RequestMapping(value = "/", method = RequestMethod.GET)
public String takeMeHome() {
    return "index";
}

@RequestMapping(value = "/getall", method = RequestMethod.GET)
public @ResponseBody Iterable<User> getAllUsers() {
    return userRepository.findAll();
}
}

pom. xml (соответствующие зависимости)

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
  <version>8.0.19</version>
</dependency>

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
  <version>2.1.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.4.1.Final</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>5.4.2.Final</version>
  <scope>runtime</scope>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.10.0.pr3</version>
</dependency>

1 Ответ

1 голос
/ 05 февраля 2020

Для всех, кто борется с той же проблемой, что и я. Я нашел ответ в разделе Billing Google App Engine. Я имею в виду, что у меня закончились проекты, которые я мог бы добавить в свою учетную запись Billing, и для них было ограничено подключение к внешней базе данных. После того, как я загрузил свое приложение в проект, в котором включена биллинг, все заработало как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...