Kotlin 无法使用picocli和micronaut连接数据库
我使用picocli连接数据库并构建本机映像。我使用micronaut连接到postgres,在执行picocli原生构建的图像时获得一些数据。但我在使用entityManager时遇到了问题。当我使用@Inject使用实体管理器时,它总是抛出异常Kotlin 无法使用picocli和micronaut连接数据库,kotlin,micronaut,micronaut-data,picocli,Kotlin,Micronaut,Micronaut Data,Picocli,我使用picocli连接数据库并构建本机映像。我使用micronaut连接到postgres,在执行picocli原生构建的图像时获得一些数据。但我在使用entityManager时遇到了问题。当我使用@Inject使用实体管理器时,它总是抛出异常 kotlin.UninitializedPropertyAccessException: lateinit property entityManager has not been initialized 按下面的代码 @Singleton clas
kotlin.UninitializedPropertyAccessException: lateinit property entityManager has not been initialized
按下面的代码
@Singleton
class StudentRepository {
@Inject
lateinit var entityManager: EntityManager
@ReadOnly
fun findAll(): List<Student?>? {
var qlString = "SELECT * FROM Student as g"
val query: TypedQuery<Student> = entityManager.createQuery(qlString, Student::class.java)
return query.getResultList()
}
}
我的申请
@picocli.CommandLine.Command(
name = "cli",
description = ["Cli"],
version = ["Cli"],
mixinStandardHelpOptions = true,
subcommands = [StudentService::class]
)
class MyApplication : Runnable {
override fun run() {
println("Begin start")
}
}
fun main(args: Array<String>) {
PicocliRunner.run(MyApplication::class.java, *args)
}
@picocli.CommandLine.Command(
name=“cli”,
description=[“Cli”],
版本=[“Cli”],
mixInstandardHelpions=true,
子命令=[StudentService::class]
)
类MyApplication:Runnable{
覆盖趣味跑(){
println(“开始”)
}
}
趣味主线(args:Array){
运行(MyApplication::class.java,*args)
}
但如果我使用http客户端,它就可以工作了。
我不知道为什么不能使用entityManager。如何使用picocli连接db你能让EntityManager注入在没有picocli的简单程序中工作吗?也许是在JUnit测试中?只是为了确认picocli确实是问题的原因,甚至与问题有关。当我检查一些情况时,如果在主函数中,我删除了PicocliRunner。运行(MyApplication::class.java,*args)并将其更改为命令行命令行(MyApplication())。当我基于它注入时执行(*args)无效。我认为这取决于皮科利伦。PicocliRunner构建所有依赖项并将其注入。但我不知道为什么HttpClient会工作,但有些情况下,比如:crudepository或entityManager不工作不,这不是我的意思。如果用CommandLine.execute替换PicocliRunner,则将删除Micronaut,而不是picocli。我想尝试相反的方法:你能制作一个简单的Micronaut应用程序(没有picocli)来成功注入EntityManager吗?现在它可以工作了吗?所以我有个问题你可以帮我
@picocli.CommandLine.Command(
name = "cli",
description = ["Cli"],
version = ["Cli"],
mixinStandardHelpOptions = true,
subcommands = [StudentService::class]
)
class MyApplication : Runnable {
override fun run() {
println("Begin start")
}
}
fun main(args: Array<String>) {
PicocliRunner.run(MyApplication::class.java, *args)
}