代码之家  ›  专栏  ›  技术社区  ›  Noreen Lazo

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

  •  1
  • Noreen Lazo  · 技术社区  · 7 年前

    我目前正在使用最新的Spring工具套件(在jdk 1.8上运行),我已从以下链接的教程中下载了源代码: accessing-data-mysql

    我试着用Tomcat运行它,结果显示 INFO: Server startup in 4581 ms 但当我访问链接时 localhost:8080/demo/all ,页面显示“HTTP状态404”,控制台没有显示任何其他日志。在我检查数据库时,表“User”也没有自动创建。

    我刚刚开始从零开始学习Spring设置,我感到很困惑。。。提前感谢您的帮助,对于如何解决我的问题,我们将不胜感激。

    非常感谢。

    4 回复  |  直到 7 年前
        1
  •  0
  •   AConsumer    7 年前

    404错误是page not found错误,所以可能是您编写的url与控制器中指定的不同。 未自动创建表,因为您尚未设置属性: 春天jpa。冬眠ddl自动=更新

    正在应用中。属性编写以下代码:-

    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数据库。

        2
  •  0
  •   akourt    7 年前

    既然您使用的是MySql,我建议您试试这个。属性配置:

    spring.datasource.username=<user_name>
    spring.datasource.password=<password>
    spring.datasource.url=jdbc:mysql://localhost:3306/<db_name>?createDatabaseIfNotExist=true&useSSL=false
    

    我在一些Spring应用程序中使用它,它对我来说很好。这将自动创建数据库并运行DDL来创建初始架构。请注意,我将它与处理设置和管理所有内容的自定义数据配置类一起使用。以下内容:

    @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

        3
  •  0
  •   Hamed Karamoko    7 年前

    如果使用maven或gradle等效命令,请运行maven安装,然后重新启动tomcat。 我也有同样的问题。这对我有用。

    希望有用。

        4
  •  0
  •   Noreen Lazo    7 年前

    我最终从头开始创建了我的项目,而不是导入现有的项目。解决Hibernate不能自动创建表的错误的方法是在应用程序中替换这一行。属性:

    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
    

    对此:

    spring.jpa.database=MYSQL
    

    我遵循了关于此链接的建议: How to let Hibernate create tables in database automatically when used with JPA?

    然而,没有找到所提供文档的链接,回答问题的人也没有在帖子上解释。

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