【问题标题】:Sonar plugin query the database声纳插件查询数据库
【发布时间】:2016-05-17 15:48:21
【问题描述】:
我正在开发一个声纳插件,对此我有一些疑问。
我的插件需要从数据库中检索数据来操作它们并将它们显示在页面中。
目前,我的插件正在使用 JDBC 驱动程序查询数据库,但我认为这在生产中会出现问题。
所以我想找到一种方法来使用 API 或声纳对象从我的插件中连接和查询数据库(只需选择查询)......
我知道有一些 WebService,但它们并没有给我我需要的所有信息,所以我必须自己进行查询。
我的插件适用于 Sonarqube 4.1。
我希望我的解释很清楚。
【问题讨论】:
标签:
database
plugins
sonarqube
【解决方案1】:
我想我找到了解决方案:
我有一个在构造函数中检索 databaseSessionFactory 的类。我在某处读到 Sonar 通过构造函数使用依赖注入。
public class MyClass implements WebService{
privateDatabaseSessionFactory sessionFactory;
public MyClass(DatabaseSessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
之后,在这个类中,我可以使用 SessionFactory 变量来查询数据库:
DatabaseSession s = sessionFactory.getSession();
String sqlQuery ="SELECT d.data FROM " + SnapshotSource.class.getName() + " d "
+ "WHERE d.id = :Id";
Query query = s.createQuery(sqlQuery);
query.setParameter("Id", 1);
List<String> queryResult = (List<String>) query.getResultList();
//queryResult.get(0) contains the source
在这个例子中,我得到了数据库中的第一个快照源。
我希望这是一个很好的解决方案,它可以帮助任何人。
【解决方案2】:
您不得直接查询 SonarQube 数据库。 DB 架构是私有的,可能会在没有通知的情况下发生更改,而且您可能会对 SonarQube 本身产生副作用。
如果您需要从数据库中读取一些内容,您应该使用允许查询 SonarQube 操作的大多数“对象”的 Web 服务 API。
在这种情况下,这并不是一个真正的插件,只是一个外部客户端应用程序。
如果您想编写一个在 SonarQube UI 中显示某些内容(如自定义小部件)的 SonarQube 插件,您还可以选择使用 SonarQube Java API。
【讨论】:
-
是的,我试过这个方法:"Sonar sonar = Sonar.create("localhost:9000", "login", "password");"在用 Java 创建的 webService 中,但出现错误:“ERROR [rails] Java::JavaLang::NoClassDefFoundError (org/sonar/wsclient/Sonar)”