在Spring Boot应用程序中读取多个实体扫描包

时间:2019-03-27 09:51:04

标签: spring spring-boot properties-file

我有Spring启动应用程序

@SpringBootApplication
@EntityScan(basePackages = {"${scan.packages}"})
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

当从一个属性中读取多个实体扫描包时,该属性由逗号分隔,如下所示?

  

scan.packages = com.mycompany.model.package1,   com.mycompany.model.package2

我遇到了这个异常:

  

java.lang.IllegalArgumentException:未知实体:   com.mycompany.model.package2.Myclass

5 个答案:

答案 0 :(得分:0)

您可以像这样扫描多个实体

@EntityScan(basePackages= {"scan.packages1","scan.packages2"})

答案 1 :(得分:0)

这应该有效

"use strict"

let cropType
  , counter
let div = document.getElementById("crop")
let feedback = document.getElementById("feedback")

document.body.onmousemove = log
div.addEventListener("mousedown", startResizeImage, false)

function startResizeImage(event) {
  log("startResize")
  cropType = event.target.className
  counter = 0

  document.body.addEventListener("mousemove", resizeImage, false)
  document.body.addEventListener("mouseup", stopResizeImage, {once: true})
}

function resizeImage(event) {
  log ("drag (" + ++counter + ") " + cropType)
}

function stopResizeImage() {
  log("stopResize")
  document.body.removeEventListener("mousemove", resizeImage, false)
}

function log(data) {
  data = data.type || data
  let text = data+": "+event.clientX+", "+event.clientY
  let lines = feedback.innerHTML.split("<br>")

  if (data === "mousemove") {
    text = text + "\n" + lines.pop() 
  } else {
    text = lines.shift() + "\n" + text
  }

  feedback.innerText = text
}

答案 2 :(得分:0)

根据EntityScan annotation javadoc,有三种方法可以定义扫描实体的程序包:

  1. valuebasePackages的别名:@EntityScan( {"scan.packages1","scan.packages2"})

  2. basePackagesvalue的别名:@EntityScan(basePackages= {"scan.packages1","scan.packages2"})

  3. basePackagesClasses,类型安全版本:@EntityScan(basePackages=E.class}。其中 E 是标记界面,仅用于在实体上加下划线。请参见下面的代码。也可以是注释。

    interface E {
    }
    
    @Entity
    public class Glass implements E {
    // Typical code to be added here
    }
    

或作为注释:

@Retention(RetentionPolicy.RUNTIME) 
@interface E {
}

@Entity
@E
public class Glass implements E {
   // Typical code to be added here
}

从我的角度来看,我将选择直接使用valuebasePackageClasses。如果我更容易阅读,我会这样做,我认为这就是value的工作,而basePackageClasses引入了类型安全的附加好处,我可以看到这样做的多种原因。一切都取决于上下文。

答案 3 :(得分:0)

我遇到了同样的问题,并在 Spring Boot 问题跟踪器上发布了一个关于它的 issue

答案是

<块引用>

...如#25436所示,@EntityScan在2.3中确实支持属性解决方案,所以,如果我们决定恢复支持,我们可能需要考虑如何处理多值属性。

所以看起来某些 Spring Boot 版本确实支持它,但后来又放弃了支持……有关更多信息,请查看引用中链接的 Spring Boot 问题。

答案 4 :(得分:-1)

尝试:

@EntityScan(basePackages= {"${scan.packages1","scan.packages2}"})