0

私の Spring Boot アプリケーションでは、ストアド プロシージャを呼び出すメソッドを使用して次のクラスを実装しました。

@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.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

同様の問題に関する次の記事、Spring boot - Custom variables in Application.propertiesおよびUsing Spring-Boot configuration properties in your own classesおよびSpring Boot @ConfigurationProperties exampleに基づいて、クラスにこの注釈を追加しました@ConfigurationProperties(prefix = "spring")(db 接続のプロパティはすべて持っています接頭辞として「春」)。ただし、次のようにテストクラスで実行すると、「アプリケーションはJDBC接続を提供する必要があります」というエラーが発生しました。これは、application.propertiesのプロパティが取得されないことを意味します。

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

動作させるため@ConfigurationPropertiesに、maven の依存関係spring-boot-configuration-processorも追加しました。なぜまだ機能していないのですか?私は何を取りこぼしたか?

4

1 に答える 1