ms/packages/database/src/manager.ts

46 lines
1.4 KiB
TypeScript
Raw Normal View History

import { plugin, database } from '@ccms/api'
import { provideSingleton, inject, postConstruct, Container, ContainerInstance } from '@ccms/container'
import { DataBase } from './database'
@provideSingleton(database.DataBaseManager)
export class DataBaseManager {
@inject(ContainerInstance)
private container: Container
@inject(plugin.PluginInstance)
private instance: any
private beanFactory: any
private mainDatabase: DataBase
private databases: { [key: string]: DataBase } = {}
@postConstruct()
initialize() {
try {
this.beanFactory = this.instance.getAutowireCapableBeanFactory()
let mainDatasource = this.beanFactory.getBean(Packages.javax.sql.DataSource.class)
this.mainDatabase = new DataBase(mainDatasource)
} catch (error) {
console.ex(error)
}
}
getMainDatabase() {
return this.mainDatabase
}
createDatabase(name: string, url: string, username: string, password: string) {
Java.synchronized(() => {
if (this.databases[name]) return this.databases[name]
return this.databases[name] = new DataBase(url, username, password)
}, this.databases)()
}
getDatabase(name: string) {
return this.databases[name]
}
disable() {
Object.values(this.databases).forEach((ds) => ds?.close())
}
}