繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM