typegraphql, typeorm, Mysql with master slave replication.
I have configured mysql with master and slave databases with separate instances and its working fine. I have encounter an error
while connecting via typeorm. Here's my ormconfig.json
{
"type": "mysql",
"logging": true,
"replication": {
"master":
{
"host": "192.168.0.250",
"port": 3306,
"username": "root",
"password": "test#123",
"database": "master",
"synchronize": true,
"extra": {
"connectionLimit": 5
}
}
,
"slaves": [
{
"host": "192.168.0.175",
"port": 3306,
"username": "root",
"password": "test#123",
"database": "master",
"synchronize": true,
"extra": {
"connectionLimit": 5
}
}
]
},
"entities": [
"src/entity/**/*.ts"
],
"migrations": [
"src/migration/**/*.ts"
],
"subscribers": [
"src/subscriber/**/*.ts"
],
"cli": {
"entitiesDir": "src/entity",
"migrationsDir": "src/migration",
"subscribersDir": "src/subscriber"
}
}
My index.ts file with database connection as
import { gqSchema } from './schema';
import "reflect-metadata";
import { createConnection } from "typeorm";
import { ApolloServer } from "apollo-server";
async function main() {
await createConnection().then(async(res) => {
console.log(res)
console.log("Database Connected")
const schema = await gqSchema()
const server = new ApolloServer({
schema,
context: ({ req }: any) => ({ req })
})
await server.listen(4000)
console.log("Server has started!")
}).catch(err => {
console.log("err", err)
})
}
main();
And my resolver.ts file
@Resolver()
export class UserResolver {
/**
* query
*/
@Authorized()
@Query(() => User)
async hello(
@Arg("firstName") firstName: string,
): Promise<User | undefined > {
const slaveQueryRunner = getConnection().createQueryRunner("slave");
try {
const connection = getConnection().getRepository(User);
const usersList = await connection.createQueryBuilder()
.from(User, "user")
.setQueryRunner(slaveQueryRunner)
.where("user.firstName = ", {firstName})
.getOne();
console.log(usersList)
} finally {
slaveQueryRunner.release();
}
}
}