2017-02-10 6 views
1

私はSpring 4.3.6とSpring Boot 1.4.4を使って、WARとしてWebLogic 12cサーバーにデプロイしたときにJNDI接続を介してOracleデータベースに接続できるアプリケーションを持っています。SpringブートJARをリモートOracleデータベースに接続するにはどうすればよいですか?

Tomcatサーバーが組み込まれたスタンドアロンのJARとしてエクスポートできる既存のプロジェクトの変更バージョンを作成する必要があります。 JAR内から同じデータベースにどのように接続すればよいですか?

これは(クラスパスsrc付き)現在のWARアプリケーションのための私の現在のEclipseディレクトリです:

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ビルドファイルです。 form.htmlは静的なWebページです。

これは私の既存のコードです:

@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; 
    } 
} 

application.propertiesで唯一の行があります:

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

データベースのURLがjdbc:oracle:[email protected]:port-number:orclですが。

アプリケーションは、WARとしてデータベースに接続し、データベースを正常に更新できます。スタンドアロンのJARと同じデータベースに接続するには、何を変更する必要がありますか?

私の問題に関連する何か言及している参照やチュートリアルはありません。ちょうど私が修正する必要があるものをどのように私を親切に歩いてください。ありがとう!

編集

このアプリケーションの詳細情報を追加するには:私のOracleデータベースには、次の列を持つテーブルPEOPLEが含まれています

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

form.htmlはその後、A提出sampleQuery()へのPOSTリクエストを送信フォーム入力からのデータベースクエリ。

アプリケーションをWARとしてデプロイし、JNDI経由でデータベースに接続すると、データベースクエリが正常に実行されます。

はしかし、あたり市の答えとしてapplication.propertiesを変更した後:私は、Eclipseの中のJavaアプリケーションとして実行したときに

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

次のエラーがスローされますが起こっ

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 

何?

+0

ちょうど私 'org.springframework.beans.factoryを与えるたとえば、application.propertiesで、次のセクションを宣言する可能性があります。NoSuchBeanDefinitionException: 'org.springframework.jdbc.core.JdbcTemplate'タイプの適格なBeanがありません:autowire候補と見なされる少なくとも1つのbeanが必要です。依存関係の注釈:{@ org.springframework.beans.factory.annotation.Autowired(必須= true)} ' – thegreatjedi

+0

あなたのpom.xmlまたはant xmlを共有してください – mhshimul

答えて

0

DataSourceの設定は、spring.datasource。*の外部設定プロパティによって制御されます。

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

参考: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

関連する問題