I made a few changes to a commit, and all of a sudden, my spring program can't seem to initialize entities and link them to repositories. When I start up spring, I get this as my log:
2022-07-10 16:39:17.137 INFO 18040 --- [ restartedMain] com.vendify.BackendDbApplication : Starting BackendDbApplication using Java 17.0.2 on DESKTOP-HSDNP64 with PID 18040 (applicaiton started by (my name) in directory)
2022-07-10 16:39:17.140 INFO 18040 --- [ restartedMain] com.vendify.BackendDbApplication : No active profile set, falling back to default profiles: default
2022-07-10 16:39:17.186 INFO 18040 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2022-07-10 16:39:17.187 INFO 18040 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2022-07-10 16:39:18.193 INFO 18040 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-07-10 16:39:18.194 INFO 18040 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
2022-07-10 16:39:18.240 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.Auth0TokensCacheRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.242 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.ItemIndexRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.244 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.ItemsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.246 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.LoggingRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.248 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.SerialsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.251 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.TransactionsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.253 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.ValidUsersRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.255 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.VendorsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.256 INFO 18040 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 58 ms. Found 0 JDBC repository interfaces.
2022-07-10 16:39:18.266 INFO 18040 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-07-10 16:39:18.267 INFO 18040 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-07-10 16:39:18.329 INFO 18040 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51 ms. Found 8 JPA repository interfaces.
2022-07-10 16:39:19.172 INFO 18040 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2022-07-10 16:39:19.184 INFO 18040 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-07-10 16:39:19.184 INFO 18040 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.52]
2022-07-10 16:39:19.275 INFO 18040 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-07-10 16:39:19.276 INFO 18040 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2089 ms
2022-07-10 16:39:19.754 INFO 18040 --- [ restartedMain] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 7.7.3 by Redgate
2022-07-10 16:39:19.760 INFO 18040 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2022-07-10 16:39:20.192 INFO 18040 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2022-07-10 16:39:20.240 INFO 18040 --- [ restartedMain] o.f.c.i.database.base.DatabaseType : Database: jdbc:mysql://localhost:3306/vendify (MySQL 8.0)
2022-07-10 16:39:20.276 INFO 18040 --- [ restartedMain] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.015s)
2022-07-10 16:39:20.284 INFO 18040 --- [ restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema `vendify`: 1
2022-07-10 16:39:20.285 INFO 18040 --- [ restartedMain] o.f.core.internal.command.DbMigrate : Schema `vendify` is up to date. No migration necessary.
2022-07-10 16:39:20.502 INFO 18040 --- [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-07-10 16:39:20.564 INFO 18040 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
2022-07-10 16:39:20.705 INFO 18040 --- [ restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-07-10 16:39:20.866 INFO 18040 --- [ restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2022-07-10 16:39:21.555 INFO 18040 --- [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-07-10 16:39:21.563 INFO 18040 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-07-10 16:39:22.307 WARN 18040 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-07-10 16:39:22.779 INFO 18040 --- [ restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6c38469b, org.springframework.security.web.context.SecurityContextPersistenceFilter@52d983cb, org.springframework.security.web.header.HeaderWriterFilter@67a31d2b, org.springframework.security.web.authentication.logout.LogoutFilter@2c8dea82, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@631bab6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1f96917a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@64458fc6, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@46d290b3, org.springframework.security.web.session.SessionManagementFilter@1312d3d0, org.springframework.security.web.access.ExceptionTranslationFilter@37e85798, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2cc95e93]
2022-07-10 16:39:23.986 INFO 18040 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2022-07-10 16:39:23.995 INFO 18040 --- [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 14 endpoint(s) beneath base path '/****{hidden for security}'
2022-07-10 16:39:24.057 INFO 18040 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
2022-07-10 16:39:24.073 INFO 18040 --- [ restartedMain] com.vendify.BackendDbApplication : Started BackendDbApplication in 7.398 seconds (JVM running for 7.938)
Mainly, the errors I am concerned about are like this in the log:
2022-07-10 16:39:18.240 INFO 18040 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.Auth0TokensCacheRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
this is an example of how I code my entity classes (All of the are like this, and I have not touched them for quite a while. They seemed to have worked before...)
package com.vendify.Entities;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.lang.NonNull;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "Logging")
@Getter
@Setter
public class LoggingEntity {
//specific code removed for security
}
with a similar repository class like this:
package com.vendify.Repositories;
import java.util.Date;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import com.vendify.Entities.Auth0TokensCacheEntity;
@RepositoryRestResource(exported = false)
public interface Auth0TokensCacheRepository extends CrudRepository<Auth0TokensCacheEntity, String> {
}
Just as proof, my MySQL database structure tables look a bit like this:
Spring seems able to connect to the database, and for the longest time, it had no issues... I've added a few packages, and it messed with some other stuff and it seems like that is when it broke, so for some context, here is how my program is generally laid out:
Help would be greatly appreciated! Thank you so much and good luck with your project fellow devs!
Update: I tried the solution of replacing CRUDRepository with JPARepository and the other annotations like Dhana suggested (Thanks :)), and spring found all those repositories. however, all my API endpoints now result in no response, even the actuator endpoints. Also when adding @ComponentScan(basePackageClasses = {my controller classes}) I get an application error that spring cannot find the service classes. Please note, as of now, when I call an endpoint the function still runs properly (It can system.out.print the result properly, but for some reason, cannot return it properly to the webserver to be displayed.
Description:
Field auth0TokensCacheService in com.vendify.Controllers.{ControllerClass} required a bean of type 'com.vendify.Services.{ControllerClass}' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.vendify.Services.{ControllerClass}' in your configuration.
My Service class looks like this:
@Service
public class HiddenService {
@Autowired
HiddenRepository hiddenRepository;
//methods in here
}
And my Controller looks like this:
@RestController
public class HiddenController {
@GetMapping("/endpointURL")
//method here
}
Thanks!
CodePudding user response:
Let me explain, from my understanding, when you have multiple spring-data modules within a project alongside Spring Data JDBC, if you try to create an interface for a specific entity that isn't annotated with specific persistence annotations by extending the interface from common modules. This will definitely not work because spring basically has no idea with which data storage your entity is associated. So, try to extend it to a specific repository like, if you are using MySQL, go for JpaRepository instead of CrudRepository, anyhow internally at one point of the hierarchy they'll be inter-linked still associating your entity with specific repository is advised
finally, make sure you add these to your respective files:
@Repository inside your custom repo
Add this to your application.properties
spring.data.jdbc.repositories.enabled=false
Hope it helps you!:)