首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat已启动,但数据库表尚未创建,localhost:8080显示"HTTP状态404“

Tomcat已启动,但数据库表尚未创建,localhost:8080显示"HTTP状态404“
EN

Stack Overflow用户
提问于 2018-03-17 07:13:46
回答 4查看 471关注 0票数 1

我目前正在使用最新的Spring (运行在JDK1.8上),我已经从本链接中的教程下载了源代码:访问-数据-mysql

我尝试使用Tomcat运行它,它显示INFO: Server startup in 4581 ms,但是当我访问链接localhost:8080/demo/all时,页面显示"HTTP 404“,控制台没有显示任何附加日志。当我检查数据库时,表"User“也不是自动创建的。

我刚开始从零开始学习春训,我觉得很困惑.预先感谢您的帮助,任何关于如何解决我的问题的想法都将不胜感激。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-09 17:32:22

最后,我白手起家地创建了自己的项目,而不是导入现有的项目。解决了Hibernate不能自动创建表的错误是在application.properties中替换了这一行:

代码语言:javascript
复制
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect

对此:

代码语言:javascript
复制
spring.jpa.database=MYSQL

我遵循了关于这个链接的建议:当与JPA一起使用时,Hibernate如何在数据库中自动创建表?

但是,没有找到与所提供文件的链接,回答问题的人也没有在他的帖子中解释。

感谢所有花时间帮我的人。

票数 0
EN

Stack Overflow用户

发布于 2018-03-17 07:45:04

404错误是页面未找到的错误,因此您可能正在编写与您在控制器中指定的内容不同的url。没有自动创建表,因为您还没有设置以下属性: spring.jpa.hibernate.ddl-auto=update

在应用程序.properties中,编写以下代码:

代码语言:javascript
复制
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数据库。

票数 0
EN

Stack Overflow用户

发布于 2018-03-17 09:44:54

由于您使用的是MySql,我建议您尝试这个.properties配置:

代码语言:javascript
复制
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类,它处理所有的设置和管理。在以下几行中:

代码语言:javascript
复制
@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的属性,例如这个:

代码语言:javascript
复制
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来做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49333495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档