Согласно этой ссылке я должен иметь возможность подключить свое веб-приложение 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>