[英]Tomcat started but the database tables aren't being created and localhost:8080 shows “HTTP Status 404”
我当前正在使用最新的Spring Tool Suite(在jdk 1.8上运行),并且已经从该链接中的教程中下载了源代码: accessing-data-mysql
我尝试使用Tomcat运行它,它INFO: Server startup in 4581 ms
显示INFO: Server startup in 4581 ms
但是当我访问链接localhost:8080/demo/all
,该页面显示“ HTTP状态404”,并且控制台未显示任何其他日志。 当我检查数据库时,“用户”表也没有自动创建。
我刚刚开始从零开始学习Spring设置,我感到很沮丧……在此先感谢您的帮助,对于解决问题的任何想法将不胜感激。
谢谢。
404错误是找不到页面错误,因此可能是您编写的URL与控制器中指定的URL不同。 由于尚未设置属性,因此不会自动创建表:spring.jpa.hibernate.ddl-auto = update
在应用程序.properties中,编写以下代码:
server.port=8095 spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe spring.datasource.username=newuser spring.datasource.password=newuser spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
我假设您正在使用oracle数据库。
由于您正在使用MySql,因此建议您尝试以下.properties配置:
spring.datasource.username=<user_name>
spring.datasource.password=<password>
spring.datasource.url=jdbc:mysql://localhost:3306/<db_name>?createDatabaseIfNotExist=true&useSSL=false
我在一些Spring应用程序上使用了它,对我来说很好用。 这将自动创建数据库并运行DDL以创建您的初始架构。 请注意,我正在将其与处理设置和管理所有内容的自定义DatabaConfiguration类一起使用。 Somethig符合以下条件:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("<where_repos_are_found>")
public class DatabaseConfiguration {
private static final String[] PACKAGES_TO_SCAN = { "<packages_locations>" };
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "spring.datasource.password";
private static final String PROPERTY_NAME_DATABASE_URL = "spring.datasource.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "spring.datasource.username";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_DATABASE_DRIVER = "hibernate.connection.driver_class";
private static final String PROPERTY_NAME_HIBERNATE_DDL = "hibernate.hbm2ddl.auto";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
private static final String PROPERTY_NAME_HIBERNATE_USE_SQL_COMMENTS = "hibernate.use_sql_comments";
private Environment env;
@Autowired
public DatabaseConfiguration(Environment env) { this.env = env; }
@Bean
public DataSource getDatasource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put(PROPERTY_NAME_HIBERNATE_DATABASE_DRIVER, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DATABASE_DRIVER));
properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
properties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, env.getProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
properties.put(PROPERTY_NAME_HIBERNATE_USE_SQL_COMMENTS, env.getProperty(PROPERTY_NAME_HIBERNATE_USE_SQL_COMMENTS));
properties.put(PROPERTY_NAME_HIBERNATE_DDL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DDL));
return properties;
}
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(getDatasource());
entityManagerFactoryBean.setPackagesToScan(PACKAGES_TO_SCAN);
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
entityManagerFactoryBean.setJpaProperties(getHibernateProperties());
return entityManagerFactoryBean;
}
@Bean
public JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return transactionManager;
}
}
同样出于任何目的,我使用hibernate自己的属性而不是Spring的属性,因此一个例子就是:
hibernate.hbm2ddl.auto=create
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.use_sql_comments=true
hibernate.connection.driver_class=com.mysql.jdbc.Driver
最后,关于404,我认为您所点击的链接可能是错误的。 我建议打开debug
日志属性,以便在应用程序启动后更好地查看您的各种映射。
您可以通过设置logging.level.<package_name_of_your_app>=debug
如果使用的是maven或gradle等效命令,请运行maven安装,然后重新启动tomcat。 我有同样的问题。 这个对我有用。
希望它是有用的。
我最终从头开始创建我的游戏,而不是导入现有项目。 解决有关Hibernate无法自动创建表的错误的原因是替换application.properties中的这一行:
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
对此:
spring.jpa.database=MYSQL
我遵循了有关此链接的建议: 与JPA一起使用时,如何让Hibernate在数据库中自动创建表?
但是,找不到提供的文档的链接,回答该问题的人也没有在他的帖子中解释它。
感谢所有花时间帮助我的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.