java - Google App Engine 应用程序与第三方云的连接

标签 java mysql database google-app-engine web-applications

根据this link我应该能够将我的 Google App Engine Web 应用程序连接到外部数据库(具体来说,在本例中,我想将其连接到 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 连接到数据库,它在本地主机上运行得很好,只是当我将文件上传到 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>

最佳答案

致所有与我有同样问题的人。我在 Google App Engine 的“计费”部分找到了答案。我的意思是,我用完了可以添加到我的计费帐户中的项目,并且它们与外部数据库的连接受到限制。当我将应用程序上传到启用了计费功能的项目后,一切都变得非常顺利。

关于java - Google App Engine 应用程序与第三方云的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076107/

相关文章:

php - 返回并比较最高计数 php mysql 的值

mongodb - MongoError : can't find any special indices: 2d (needs index), 2dsphere(需要索引)

mysql - rails 将 geoip 资源保存在同一个数据库或分离的数据库中哪个更好?

mysql - npm 包中的日期类型转换?

sql - 我没有得到数据库规范化 - 重复的 FK 不是也在重复吗?

java - 不明白正则表达式的结果

java - CardView 在运行时不显示高程

java - 将 Shape 转换为 Rectangle2D.Double 的正确方法是什么?

java在创建文件对象时将文件权限设置为777

php - mysql 限制子句不能与 php 绑定(bind)值一起使用