私のSpringブートアプリケーションでは、ストアドプロシージャを呼び出すメソッドで次のクラスを実装しました。ストアドプロシージャを呼び出すと、データベース接続を必要とするのでSpringブートコンポーネントにプロパティ値を挿入する方法
@Component
@ConfigurationProperties(prefix = "spring")
public class FmTrfUtil {
static int returnVal;
@Value("${spring.datasource.url}")
static String url;
public static int insertFmTrfs(List<String> trfs, String source) {
System.out.println(url);
EntityManager em = Persistence.createEntityManagerFactory("RIStore_FM").createEntityManager();
Session session = em.unwrap(Session.class);
final String[] trfArray = trfs.toArray(new String[trfs.size()]);
final String src = source;
session.doWork(new Work(){
public void execute(Connection conn) throws SQLException {
CallableStatement stmt = null;
OracleConnection oraCon = conn.unwrap(OracleConnection.class);
Array array = oraCon.createARRAY("VARCHAR2_TAB_T", trfArray);
stmt = conn.prepareCall("{? = call FM_TRF_UTIL.process_fm_trf(?,?)}");
stmt.registerOutParameter(1, Types.INTEGER);
stmt.setArray(2, array);
stmt.setString(3, src);
stmt.execute();
returnVal = stmt.getInt(1);
}
});
return returnVal;
}
}
、私はapplication.propertiesからこれらの対応するプロパティ値をロードする必要があります。同様の問題、Spring boot - custom variables in Application.propertiesとUsing Spring-Boot configuration properties in your own classesとSpring Boot @ConfigurationProperties exampleに関する以下の記事に基づいて
spring.profiles.active=dev
spring.datasource.url=jdbc:oracle:thin:@ldap://xxx:389/risdev3, cn=OracleContext,dc=x,dc=net
spring.datasource.username=owner
spring.datasource.password=owner987
私のクラス@ConfigurationProperties(prefix = "spring")
のためにこのアノテーションを追加しました(データベース接続のプロパティはすべて接頭辞として "spring"を持っています)。しかし、次のようにテストクラスを実行すると、「アプリケーションがJDBC接続を提供する必要があります」というエラーが表示されます。つまり、application.propertiesのプロパティは取得されません。 @ConfigurationProperties
が動作するためには
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = RistoreWebApplication.class, initializers = ConfigFileApplicationContextInitializer.class)
public class FmTrfUtilTest {
@Test
public void test() {
List<String> trfs = new ArrayList<String>();
trfs.add("TRF000001");
trfs.add("TRF000002");
int ret = FmTrfUtil.insertFmTrfs(trfs, "SARC");
assertTrue(ret > 0);
}
}
、私はあまりにもMavenの依存関係spring-boot-configuration-processor
を追加しました。なぜまだ動作していないのですか?私は何を取りこぼしたか?
emを正確に注入する必要がありますか?メソッドのすぐ上に '@PersistenceContext(unitName =" RIStore_FM ")' '静的EntityManager em;を持つ' EntityManager'を注入しようとしましたが、 'Persistenceアノテーションは静的フィールドでサポートされていません'というエラーがあります。私が 'static'を取り除くと、メソッドの静的宣言が必要であるとコンパイルされません。 – ddd
メソッドもフィールドも静的ではありません。 Spring Dataサンプルプロジェクトとリファレンスを見てください。 SpringでJPAを使用するのは、Springのやり方をすれば本当に簡単です。 –
これは今、ありがとうございます。 – ddd