2017-02-10 4 views
1

스프링 4.3.6 및 스프링 부트 1.4.4를 사용하는 응용 프로그램을 WebLogic 12c 서버에 WAR로 배포 할 때 JNDI 연결을 통해 Oracle 데이터베이스에 연결할 수 있습니다.스프링 부트 JAR을 원격 Oracle 데이터베이스에 어떻게 연결합니까?

이제 Tomcat 서버가 내장 된 독립 실행 형 JAR로 내보낼 수있는 기존 프로젝트의 수정 된 버전을 만들어야합니다. JAR 내에서 동일한 데이터베이스에 어떻게 연결합니까?

WAR Project 
| src 
| | main.java 
| | | controllers 
| | | | BasicController.java 
| | | | CrudController.java 
| | | Application.java 
| | META-INF 
| | | resources 
| | | | form.html 
| JRE System Library [JDK 1.7] 
| Referenced Libraries 
| lib 
| | compile 
| | runtime 
| resources 
| | application.properties 
| target 
| WEB-INF 
| | classes 
| | weblogic.xml 
| build_war.xml 

build_war.xml이 WAR에 응용 프로그램을 내보내기위한 Ant 빌드 파일입니다

이것은 (클래스 경로 src로) 현재의 WAR 응용 프로그램에 대한 내 현재 이클립스 디렉토리입니다. form.html은 정적 웹 페이지입니다.

이 기존 코드 : application.properties에 한 줄이

@SpringBootApplication 
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer { 
    public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
    } 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(Application.class); 
    } 
} 

@Controller 
public class BasicController { 
    @RequestMapping("/") 
    public String goToForm() { 
    return "form.html"; 
    } 
} 

@RestController 
public class CrudController { 
    @Autowired 
    private JdbcTemplate jdbcTemplate; 

    @PostMapping("/result") 
    public String sampleQuery(@RequestParam String tableName, @RequestParam String colNameSet, 
     @RequestParam String valueSet) { 
    String query = "INSERT INTO " + tableName + " (" + colNameSet + ") VALUES " + valueSet; 
    try { 
     jdbcTemplate.update(query); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     query = e.toString(); 
    } 
    return query; 
    } 
} 

:

spring.datasource.jndi-name=database.jndi.name 

데이터베이스 URL이 jdbc:oracle:[email protected]:port-number:orcl입니다.

응용 프로그램은 WAR로 데이터베이스에 연결하고 데이터베이스를 성공적으로 업데이트 할 수 있습니다. 독립형 JAR과 동일한 데이터베이스에 연결하려면 무엇을 변경해야합니까?

Google에서 내 문제와 관련된 모든 언급이나 자습서를 찾을 수 없습니다. 제발 내가 정확히 어떻게 수정해야 하는지를 통해 나를 걸으십시오. 감사!

편집 :

이 응용 프로그램에 대한 자세한 정보를 추가하려면 : 내 Oracle 데이터베이스는 다음과 같은 열이있는 테이블 PEOPLE을 포함는 :

ID INT NOT NULL, 
NAME VARCHAR(20) NOT NULL, 
AGE INT NOT NULL, 
PRIMARY KEY (ID) 

form.html는 다음을 제출 sampleQuery()에 POST 요청을 제출 양식 입력에서 데이터베이스 조회.

응용 프로그램을 WAR로 배포하고 JNDI를 통해 데이터베이스에 연결할 때 데이터베이스 쿼리가 성공적으로 실행됩니다. 그러나

,시의 대답에 따라 application.properties을 수정 후 :

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [INSERT INTO PEOPLE (ID,NAME,AGE) VALUES ('2','Momo','21')]; nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PEOPLE 
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:91) 
... 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PEOPLE 
... 
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
... 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:408) 
... 53 more 
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PEOPLE 
at org.hsqldb.error.Error.error(Unknown Source) 
... 
at org.hsqldb.Session.execute(Unknown Source) 
... 58 more 

이 무슨 일 : 이클립스에서 자바 응용 프로그램으로 실행할 때

spring.datasource.url=jdbc:oracle:thin:@ip-address:port:orcl 
spring.datasource.username=user-name 
spring.datasource.password=password 

다음과 같은 오류가 발생?

+0

합니다.NoSuchBeanDefinitionException : 'org.springframework.jdbc.core.JdbcTemplate'유형의 유효한 bean이 없습니다. autowire 후보로 간주되는 적어도 하나의 bean이 필요합니다. 의존성 주석 ​​: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}' – thegreatjedi

+0

pom.xml 또는 ant xml을 공유하십시오 – mhshimul

답변

0

DataSource 구성은 spring.datasource. *의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어, application.properties에서 다음 섹션을 선언 할 수 있습니다

spring.datasource.url=jdbc:thin://url:port/service 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driver-class-name=com.Oracle.OracleDriver 

참조 : 단지`org.springframework.beans.factory 저를 제공 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html

+0

application.properties에 Oracle 드라이버를 추가하지 않았습니다. 클래스 경로에 ojdbc7 jar를 추가해야합니다. 그러나 maven은 저장소에 Oracle 드라이버가 없습니다. 수동으로 추가하려면 https : //springframework.guru/configuring-spring-boot-for-oracle/을 따르십시오. – mhshimul