>

이 예제 로컬 MySQL 서버 대신 Redis를 사용하지 않습니다.

이번 봄 부팅 앱을 다음과 같이 편집했습니다 :

요점 :

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
    }
}
apply plugin: 'spring-boot'
apply from: JAVA_GRADLE

//this 'if' statement is because I was getting error: Execution failed for task ':samples:findbyusername:findMainClass'.
//> Could not find property 'main' on task ':samples:findbyusername:run'.
if (!hasProperty('mainClass')) {
    ext.mainClass = 'sample.FindByUsernameApplication'
}
tasks.findByPath("artifactoryPublish")?.enabled = false
group = 'samples'
dependencies {
    compile("org.springframework.boot:spring-boot-starter-jdbc:$springBootVersion") 
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.2'
    compile group: 'org.springframework.session', name: 'spring-session', version: '1.2.0.RELEASE'

    compile project(':spring-session'),
            "org.springframework.boot:spring-boot-starter-web",
            "org.springframework.boot:spring-boot-starter-thymeleaf",
            "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect",
            "org.springframework.security:spring-security-web:$springSecurityVersion",
            "org.springframework.security:spring-security-config:$springSecurityVersion",
            "com.maxmind.geoip2:geoip2:2.3.1",
            "org.apache.httpcomponents:httpclient"
    testCompile "org.springframework.boot:spring-boot-starter-test",
                "org.assertj:assertj-core:$assertjVersion"
    integrationTestCompile gebDependencies,
            "org.spockframework:spock-spring:$spockVersion"
}

def reservePort() {
    def socket = new ServerSocket(0)
    def result = socket.localPort
    socket.close()
    result
}

application.properties

spring.datasource.url = jdbc:mysql://localhost:3306/TEST?characterEncoding=UTF-8&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=but
spring.thymeleaf.cache=false
spring.template.cache=false

HttpSessionConfig.java

@EnableJdbcHttpSession // <1>
public class HttpSessionConfig {
}

응용 프로그램이 바람둥이에서 시작되지만 브라우저에서localhost를 누르면 다음과 같은 결과가 나타납니다.

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon May 23 21:14:31 CEST 2016
There was an unexpected error (type=Internal Server Error, status=500).
PreparedStatementCallback; bad SQL grammar [INSERT INTO SPRING_SESSION(SESSION_ID, CREATION_TIME, LAST_ACCESS_TIME, MAX_INACTIVE_INTERVAL, PRINCIPAL_NAME) VALUES (?, ?, ?, ?, ?)]; nested exception is java.sql.SQLSyntaxErrorException: Table 'test.spring_session' doesn't exist

이 테이블을 수동으로 생성하는 것에 대해 읽은 것을 기억하지 않아서 스프링이 나를 위해 처리한다고 가정했습니다 ...

수정 : 실제로 수동으로 테이블 만들기그런 다음 응용 프로그램이 정상적으로 실행됩니다. 하지만 수동으로이 작업을 수행해서는 안됩니다.


  • 답변 # 1

    Spring Session은 대부분의 주요 RDBMS에 대한 데이터베이스 스키마 스크립트와 함께 제공됩니다 ( org.springframework.session.jdbc 에 있음)  하지만 Spring Session JDBC 지원을위한 데이터베이스 테이블 생성은 사용자 스스로 관리해야합니다.

    제공된 스크립트는 그대로 사용할 수 있지만 일부 사용자는 제공된 스크립트를 참조로 사용하여 특정 요구에 맞게 스크립트를 수정할 수 있습니다.

    Flyway와 같은 데이터베이스 마이그레이션 도구를 사용하여 데이터베이스 테이블 생성을 처리하는 옵션이 있습니다.

    Spring Boot를 사용하고 있기 때문에 Spring Session JDBC 스키마의 자동 초기화에 대한 지원을 추가하기 위해 보류중인 PR이있을 수 있습니다. https://github.com/spring-projects/spring-boot/pull/5879

    Spring Session 자체에서 테이블을 자동으로 생성해야한다고 문서로 잘못 판단한 경우 문제보고를 고려하여 필요한 경우 문서를 업데이트하십시오. https://github.com/spring-projects/spring-session/ 문제

  • 이전 c# - Windows Form의 모든 데이터를 txt 파일로 쓰려면 어떻게합니까? [닫은]
  • 다음 jquery - URL을 변경하지 않고 Twitter Bootstrap 'nav-tabs'메뉴를 만듭니다가능합니까?