Porównaj ceny domen i usług IT, sprzedawców z całego świata

Błąd Spring Boot podczas tworzenia komponentu bean o nazwie „dataSource” zdefiniowanego w klasie zasobów ścieżki


Mam aplikację internetową Spring Boot. Koncentruje się na podejściu RESTful. Wydaje się, że cała konfiguracja jest na miejscu, ale z jakiegoś powodu MainController nie może przetworzyć żądania. Powoduje to błąd 404. Jak to naprawić?
@Controller
public class MainController { @Autowired
ParserService parserService; @RequestMapping(value="/", method= RequestMethod.GET)
public @ResponseBody String displayStartPage(){
return "{hello}";
}
}


podanie

@Configuration
@ComponentScan(basePackages = "")
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
} @Override
protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}


ParserController

@RestController
public class ParserController { @Autowired
private ParserService parserService; @Autowired
private RecordDao recordDao; private static final Logger LOG = Logger.getLogger(ParserController.class); @RequestMapping(value="/upload", method= RequestMethod.POST)
public @ResponseBody String fileUploadPage( }
}


UPDATE

Wygląda na to, że MySQL nie może zostać zainicjowany przez Spring ...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.


Zaktualizuj 2


application.properties

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/logparser
spring.datasource.username=root
spring.datasource.password=rootspring.jpa.database = MYSQL
spring.jpa.show-sql = true# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan:/


UPDATE4

Wygląda na to, że kontrolery Lite nie odpowiadają, mimo że ustawiono
@RequestMapping
. Dlaczego nie?

PS. Dzieje się tak, gdy uruchamiam cykl życia Maven
test
.
Podczas pracy w trybie degub IntelliJ nie wyświetla żadnych błędów.


UPDATE5

Również używam tego DAO, jak opisano w samouczku ....
public interface RecordDao extends CrudRepository<Record, Long> {
}

http://blog.netgloo.com/2014/1 ... rnate
http://blog.netgloo.com/2014/1 ... nate/
/

UPDATE6

Właściwie zmieniłem właściwości aplikacji. I wypróbował każdą kombinację, ale nie działa. ; (

Wyjście Maven

:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running IntegrationTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.365 sec <<< FAILURE! - in IntegrationTest
saveParsedRecordsToDatabase(IntegrationTest) Time elapsed: 2.01 sec <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:101)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:331)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:213)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:290)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:292)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:233)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:176)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wygląda na to, że pierwotny problem dotyczy automatycznego dostrajania.
Jeśli nie potrzebujesz źródła danych, po prostu usuń je z procesu automatycznej konfiguracji:
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najwyraźniej nie przekazałeś wystarczającej ilości danych do Spring Boot, aby skonfigurować źródło danych
Utwórz/w istniejącej
application.properties
dodaj następujące elementy
spring.datasource.driverClassName=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

upewnij się, że dodałeś wartość dla każdej właściwości.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Może zapomniałeś sterownika MySQL JDBC.
<pre class="lang-xml prettyprint-override">
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Otrzymałem ten sam błąd, dowiedziałem się, że jest to spowodowane niektórymi zależnościami nieobecnymi w moim pom.xml, takich jak Spring JPA, Hibernate, Mysql, a może Jackson.
Upewnij się więc, że w pliku pom.xml nie brakuje zależności i sprawdź zgodność wersji.
<!-- Jpa and hibernate -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.3.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Właściwości
hibernate. *
są bezużyteczne, muszą być właściwościami
spring.jpa. *
. Nie wspominając o tym, że próbujesz zastąpić te już ustawione za pomocą właściwości
spring.jpa. *
. (Aby uzyskać wyjaśnienie każdej właściwości, gorąco polecam przeczytanie

przewodnik referencyjny
http://docs.spring.io/spring-b ... -data
Spring Boot .
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql = true# Hibernate
spring.jpa.hibernate.ddl-auto=update

Ponadto pakiety do skanowania są określane automatycznie na podstawie pakietu podstawowego Twojej klasy
Application
. Jeśli chcesz określić coś innego, użyj adnotacji
@EntityScan
. Ponadto określenie samego pakietu najwyższego poziomu nie jest całkowicie rozsądne, ponieważ przeskanuje całą ścieżkę klas, co poważnie wpłynie na wydajność.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ten problem występuje podczas wykonywania testu.
Dodaj zależność
testCompile group: 'com.h2database', name: 'h2', version: '1.4.197'

Dodaj zasoby folderu, aby przetestować źródło, dodaj plik bootstrap.yml
i dostarczaj treści.
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:h2:mem:TEST
driver-class-name: org.h2.Driver
username: username
password: password
hikari:
idle-timeout: 10000

spowoduje to dostosowanie źródła danych.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

zmień poniższy wiersz kodu
spring.datasource.driverClassName

do
spring.datasource.driver-class-name
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz application.properties w aplikacji do rozruchu sprężynowego, po prostu umieść poniższy wiersz w application.properties i powinno działać:


spring.datasource.url: jdbc:mysql://google/?cloudSqlInstance=&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=*** * &password=

****
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Sprawdź, czy baza danych jest zależna od grupy czasu

spełnienie

na build.gradle
runtime group: 'com.h2database', name: 'h2', version: '1.4.194'

lub zmieniając zakres z test na

spełnienie

jeśli używasz Maven
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.194</version>
<scope>runtime</scope>
</dependency>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku tak się stało, ponieważ org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource jest niekwalifikowanym polem automatycznym i używam wielu kwalifikowanych nazwanych źródeł danych. Rozwiązałem ten problem, używając @Primary arbitralnie na jednej z moich konfiguracji fasoli DataSource, takiej jak
@Primary
@Bean(name="oneOfManyDataSources")
public DataSource dataSource() { ... }

Zakładam, że chcą, abyś zaimplementował AbstractRoutingDataSource, a wtedy ta autokonfiguracja będzie działać, ponieważ nie jest potrzebny żaden kwalifikator, masz tylko jedno źródło danych, które pozwala Twoim fasolom na rozwiązywanie odpowiedniego źródła danych w razie potrzeby. Wtedy w ogóle nie potrzebujesz adnotacji @Primary ani @Qualifier, ponieważ masz tylko jedno źródło danych.
W każdym razie, moje rozwiązanie zadziałało, ponieważ moje ziarna ustawiły źródło danych według kwalifikatora, a funkcja automatycznej konfiguracji JPA jest zadowolona, ​​ponieważ ma jedno podstawowe źródło danych. W żadnym wypadku nie polecam tego jako „właściwego” sposobu robienia rzeczy, ale w moim przypadku szybko rozwiązało to problem i nie ograniczyło w żaden zauważalny sposób zachowania mojej aplikacji. Miejmy nadzieję, że pewnego dnia uda nam się zaimplementować AbstractRoutingDataSource i zrefaktoryzować wszystkie ziarna, które potrzebują określonego DataSource, a wtedy być może będzie to lepsze rozwiązanie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Napotkałem ten problem nawet po podaniu wszystkich wymaganych właściwości źródła danych w application.properties. Potem zdałem sobie sprawę, że klasa konfiguracji właściwości nie była skanowana podczas rozruchu Springa, ponieważ znajdowała się w innej hierarchii pakietów w porównaniu do mojej aplikacji Spring boot Application.java i dlatego żadne właściwości nie zostały zastosowane do źródła danych.
Zmieniłem nazwę pakietu mojej klasy konfiguracji właściwości i zaczęło działać.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku po prostu zignorowałem następujące elementy w moim pliku application.properties:
# Hibernate
#spring.jpa.hibernate.ddl-auto=update
To działa dla mnie ....
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie jest to bezpośrednio związane z pierwotnym pytaniem, ale byłoby pomocne dla kogoś. Ten błąd pojawił się przy prostej strukturze dwóch projektów. Jeden projekt obsługiwał niektóre operacje na bazie danych za pomocą spring jdbc (powiedzmy A), a inny nie miał żadnych operacji jdbc (powiedzmy B). Ale nadal ten błąd pojawił się, gdy uruchomiłem usługę B. mówiąc, że źródło danych powinno zostać poprawnie zainicjowane.
Jak zrozumiałem, dodałem tę zależność do macierzystego pom z dwóch modułów
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

To spowodowało, że wiosna zainicjowała również zależności jdbc dla projektu B. Więc przeniosłem to do projektu pomponowego, wszystko było w porządku.
Mam nadzieję, że to komuś pomoże
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy używasz aplikacji jako słoika? (java -jar xxxx.jar)
Jeśli tak, czy masz plik application.properties przechowywany w tym pliku jar?
Jeśli nie, spróbuj dowiedzieć się, dlaczego:
  • Aby automatycznie zapakować je do jar, pliki mogą znajdować się w: src/main/resources/application.properties
  • Wtyczkę Maven w pom.xml można również dostosować
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

U mnie to zadziałało, możesz spróbować swoich sił:
Dodaj opcje do tej maszyny wirtualnej w Tomcat
-DdevBaseDir="C:\Your_Project_Dir_Path"
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dawanie ci czegoś innego w obliczu tego rodzaju błędu nie może stworzyć
komponent bean źródła danych w przypadku testowym.
Może to wynikać z kilku powodów:
  • Nie ma źródła danych, będziesz musiał utworzyć swoje źródło danych, źródło danych h2 w pamięci lub cokolwiek innego, lub możesz wybrać sposób, na przykład
    exclude = {datasource ···}
    .
  • Masz swoje źródło danych, takie jak MySQL, ale nadal nie działa. Zostało to wywołane przez klasę
    AutoConfigureTestDatabase
    , wybierze źródło danych, które może powodować zamieszanie.

Rozwiązanie: dodaj
@AutoConfigureTestDatabase (replace = AutoConfigureTestDatabase.Replace.NONE)
, aby uniknąć zastępowania domyślnego źródła danych.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Rozwiązałem problem ze zmianą zależności rodzica Spring Boot.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>

do
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>

Więcej informacji można znaleźć w uwagach do wydania:

Informacje o wydaniu Spring Boot 2.1.0
https://github.com/spring-proj ... Notes
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Od kilku dni mam ten sam problem i ostatecznie problem nie dotyczy kodu, problem zaczyna się od maven, musisz usunąć wszystkie pliki, które pobrał z dysku twardego "C: \ Users \ nazwa_użytkownika.m2 \ repozytorium ”i wykonaj kolejną aktualizację maven dla swojego projektu, która rozwiąże problem.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się