站点微信订阅号zhengjinyibu,欢迎大家搜索关注.
spring文件配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xmlns:mysql="http://sammor.javaeye.com/schema/tags" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://sammor.javaeye.com/schema/tags http://sammor.javaeye.com/schema/tags/springtags.xsd">
<mysql:client id="mysqlCusDatasource" ip="localhost" port="3306" characterEncoding="utf8" dbname="test" username="root" password="123456"/>
</beans>
|
xsd文件
META-INF/spring.handlers
1
| http\://sammor.javaeye.com/schematags=book.spring.MysqlTagDatasourceNamespaceHander
|
META-INF/spring.schemas
1
| http\://sammor.javaeye.com/schema/tags=book.spring.MysqlTagDatasourceNamespaceHander
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://sammor.javaeye.com/schema/tags" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" targetNamespace="http://sammor.javaeye.com/schema/tags" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:import namespace="http://www.springframework.org/schema/beans" /> <xsd:element name="client"> <xsd:annotation> <xsd:documentation>mysqls datasource definition</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:complexContent> <xsd:extension base="beans:identifiedType"> <xsd:attribute name="dbname" type="xsd:string" use="required" /> <xsd:attribute name="ip" type="xsd:string" use="required"/> <xsd:attribute name="port" type="xsd:long" use="required"/> <xsd:attribute name="username" type="xsd:string" use="required" /> <xsd:attribute name="password" type="xsd:string" use="required" /> <xsd:attribute name="characterEncoding" type="xsd:string" default="utf8"> </xsd:attribute> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> </xsd:schema>
|
需要用到的java代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package book.spring;
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
public class MysqlTagDatasourceNamespaceHander extends NamespaceHandlerSupport {
@Override public void init() { registerBeanDefinitionParser("client",new MysqlClientTagParser()); }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| package book.spring;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.JdbcConstants; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.w3c.dom.Element;
public class MysqlClientTagParser implements BeanDefinitionParser {
@Override public BeanDefinition parse(Element element, ParserContext parserContext) {
String id = element.getAttribute("id"); boolean contains =parserContext.getRegistry().containsBeanDefinition(id); if(contains){ throw new RuntimeException("已存在了id为"+id+"的bean了"); }
RootBeanDefinition beanDefinition = new RootBeanDefinition(); beanDefinition.setBeanClass(DruidDataSource.class); beanDefinition.setLazyInit(false);
MutablePropertyValues values =new MutablePropertyValues();
values.add("username",element.getAttribute("username")); values.add("password",element.getAttribute("password")); values.add("dbType",JdbcConstants.MYSQL); values.add("initialSize",3); values.add("defaultAutoCommit",false); values.add("defaultAutoCommit",false); values.add("driverClassName","com.mysql.jdbc.Driver");
values.add("url","jdbc:MySql://"+element.getAttribute("ip")+":"+element.getAttribute("port")+"/"+element.getAttribute("dbname")+"");
beanDefinition.setPropertyValues(values);
parserContext.getRegistry().registerBeanDefinition(id,beanDefinition);
return beanDefinition; }
}
|
运行实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package book.spring;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.sql.DataSource;
public class MycusTagTest {
public static void main(String[] args) throws Exception{ ClassPathXmlApplicationContext classPathXmlApplicationContext =new ClassPathXmlApplicationContext("spring-tags-cus.xml");
DataSource dataSourc =(DataSource) classPathXmlApplicationContext.getBean("mysqlCusDatasource");
System.out.println(dataSourc.getConnection().getMetaData().getDatabaseProductName()); classPathXmlApplicationContext.start();
synchronized (MycusTagTest.class) { while (true) { try { MycusTagTest.class.wait(); } catch (InterruptedException e) { } } } } }
|
本文内容仅作为作者个人兴趣与观点,不代表所在公司及团队的观点和决策。若有不恰当之处,请联系站长.