2017-03-03 32 views
23

Moja aplikacja używa Spring-Boot 1.4.1.RELEASE, a konfiguracja mojego źródła danych wygląda następująco;Usterka zatwierdzania źródła danych rozruchu wiosny

spring: 
    datasource: 
    url: *** 
    username: *** 
    password: *** 
    driver-class-name: oracle.jdbc.driver.OracleDriver 
    initial-size: 1 
    max-active: 100 
    max-idle: 30 
    min-idle: 1 
    max-wait: 0 
    pool-prepared-statements: true 
    max-open-prepared-statements: 3 

Problem polega na tym, że ostatni przypadek testowania mojego integracji jeśli zawiera logikę @Sql konfiguracji w to, nie popełnić ostatniej konfiguracji SQL. Kłopoty zdarzają się rzadko ze względu na zmianę kolejności spraw oraz fakt, że istnieje tylko garść przypadków z logiką instalacji, aby przygotować DB. Nie ma konfiguracji oprócz tej dla OracleDB, i to jest w ConfigClass.

@SpringBootTest(classes = ConfigClass.class) 
public class EtcTest { 

    @After 
    public void teardown() { 
     // teardwon X, Y, & Z 
    } 

    @Test 
    @Sql("setupX.sql") 
    @Sql("setupY.sql") 
    @Sql("setupZ.sql") 
    public void get_fromDb() { 
     List<Etc> list = buildExpectedList(); 
     Obj expected = buildExpected(); 
     Obj actual = getCallToAPI(); 

     assertThat(rs.getX()).isEqualTo(expected.getX()); 
     assertThat(rs.getY()).isEqualTo(expected.getY()); 
     assertThat(rs.getZ()).containsAll(list); 
    } 
} 

Kłopot, na przykład w powyższym przypadku, jeśli to było ostatni przypadek integracji że nie popełnić ostatni SQL w @Sql adnotacji, mianowicie SetupZ.sql, ale dane nie są całkowicie brakuje, to wstawia klucz podstawowy, a czasami columnA lub columnB, to tak, jakby coś naprawdę nie tak.

Czy obecność lub brak jakiejś konfiguracji spowoduje to? Jeśli nie, jaki byłby powód?

+4

Jeśli używasz automatycznej konfiguracji, należy zapoznać się [notatka release] (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4 -Release-Notes) podczas aktualizacji, w szczególności [tej sekcji] (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#datasource-binding). Wszystkie ustawienia dotyczące puli połączeń zostały przeniesione do dedykowanej przestrzeni nazw. Przejrzyj swoją konfigurację. –

+0

@StephaneNicoll Używam tej samej wersji, jedyną zmianą było to, że dodałem kilka metod konfiguracji i odkładania, które są adnotowane adnotacjami junit przed i po. Ostatniego razu udało mi się pomyślnie zbudować kompilację, gdy w jakiś sposób kompilacja zakończyła testem związanym z bazami danych niebędącą bazą danych, teraz ponownie otrzymuję ten sam problem z ponownym zgłoszeniem w ostatnim przypadku. –

+2

Dla Oracle 9i należy używać 'oracle.jdbc.OracleDriver' zamiast' oracle.jdbc.driver.OracleDriver' jako Oracle oświadczyło, że 'oracle.jdbc.driver.OracleDriver' jest przestarzałe. –

Odpowiedz

1

Witam dla klas testowych zamiast z rzeczywistej bazy danych można przejść z bazami danych In-Memory, takimi jak DB2, derby i h2. zapewnia rozwiązanie twoich problemów.

na przykład kod można znaleźć pod adresem URL Spring data jpa repository In-memory test case

1

Można by spróbować użyć WZP do utrzymującego. Dostępne będą następujące ustawienia:

spring.jpa.show-sql=true 

Następnie można zobaczyć, co poszło nie tak.